剑指offer 007:重建二叉树
剑指 Offer 07. 重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例 1:
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
注意:本题与主站 105 题重复:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
Related Topics
树
数组
哈希表
分治
二叉树
递归
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return buildTree(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
}
public TreeNode buildTree(int[] preorder,int prei,int prej,int[] inorder,int ini,int inj){
if(prei > prej){
return null;
}
int i = ini;
//找到中序遍历根节点的位置
while (i <= inj){
if(inorder[i] == preorder[prei]){
break;
}
i++;
}
TreeNode node = new TreeNode(preorder[prei]);
node.left = buildTree(preorder,prei+1,prei+i-ini,inorder,ini,i-1);
node.right = buildTree(preorder,prei+i-ini+1,prej,inorder,i+1,inj);
return node;
}
}
解答成功:
执行耗时:3 ms,击败了36.30% 的Java用户
内存消耗:41.2 MB,击败了24.62% 的Java用户