Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
给定中序遍历与后序遍历结果,构造二叉树
递归
public class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
if(inorder.length<1)
return null;
TreeNode root = new TreeNode(postorder[postorder.length-1]);
int index = 0;
for(index=0;index<inorder.length;index++){
if(inorder[index]==postorder[postorder.length-1])
break;
}
if(index>0){
int[] preP = new int[index];
int[] preI = new int[index];
for(int i=0;i<index;i++){
preP[i]=postorder[i];
preI[i]=inorder[i];
}
root.left = buildTree(preI,preP);
}
if(postorder.length-index-1>0){
int[] postP = new int[postorder.length-index-1];
int[] postI = new int[inorder.length-index-1];
for(int i=index+1;i<postorder.length;i++){
postP[i-index-1]=postorder[i-1];
postI[i-index-1]=inorder[i];
}
root.right = buildTree(postI, postP);
}
return root;
}
}