目录
描述
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例 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]
思想:递归
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
int len = preorder.length;
return help(preorder, 0, len-1, inorder, 0, len-1);
}
public TreeNode help(int[] preorder, int a, int b, int[] inorder, int m, int n){
if(a > b){
return null;
}
TreeNode root = new TreeNode(preorder[a]);
int index = -1;
for(int i = m; i <= n; i++){
if(inorder[i] == preorder[a]){
index = i;
break;
}
}
root.left = help(preorder, a+1, a+index-m, inorder, m, index-1);
root.right = help(preorder, a+index-m+1, b, inorder, index+1, n);
return root;
}
}