题意:
给一个二叉树的前序遍历和中序遍历结果,构造出这棵树。
分析:
分析同上一篇。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length==0 || inorder.length==0)
return null;
return helper(preorder, inorder, 0, 0, inorder.length-1);
}
private TreeNode helper(int[] preorder, int[] inorder, int rootindex, int start, int end){
if(start > end){
return null;
}
int rootval = preorder[rootindex];
TreeNode root = new TreeNode(rootval);
int index = findRootInInorder(rootval, inorder, start, end);
int leftsize = index - start;
root.left = helper(preorder, inorder, rootindex+1, start, index-1);
root.right = helper(preorder, inorder, rootindex+1+leftsize, index+1, end);
return root;
}
private int findRootInInorder(int rootval, int[] inorder, int start, int end){
for(int i=start; i<=end; i++){
if(inorder[i] == rootval){
return i;
}
}
return -1;
}
}