剑指 Offer 07. 重建二叉树
一、题目
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]
限制:
0 <= 节点个数 <= 5000
二、题解
树一般都有递归和循环两种方式
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
//树一般都有递归和循环两种方式
int preindex = 0;//定义遍历到哪里了
int inindex = 0;
public TreeNode buildTree(int[] preorder, int[] inorder) {
return rec(preorder, inorder, null);
}
private TreeNode rec(int[] preorder, int[] inorder, TreeNode node) {
if (preindex == preorder.length || (node != null && inorder[inindex] == node.val)) {
return null;
}
//先建立跟节点
TreeNode root = new TreeNode(preorder[preindex++]);
//左子树
root.left = rec(preorder, inorder, root);
inindex++;
//右子树
root.right = rec(preorder, inorder, node);
return root;
}
}
剑指 Offer 03. 数组中重复的数字
剑指 Offer 04. 二维数组中的查找
剑指 Offer 05. 替换空格
剑指 Offer 06. 从尾到头打印链表
剑指 Offer 07. 重建二叉树
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 10- I. 斐波那契数列
剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 11. 旋转数组的最小数字
剑指 Offer 12. 矩阵中的路径
剑指 Offer 15. 二进制中1的个数
声明:
题目版权为原作者所有。文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。
By luoyepiaoxue2014
B站: https://space.bilibili.com/1523287361 点击打开链接
微博: http://weibo.com/luoyepiaoxue2014 点击打开链接