Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
思路:根据后序遍历的最后一个值为根节点,在inorder中查找到这个节点,左边的为左子树,右边为右子树
代码如下( 已通过leetcode)
public class Solution {
public TreeNode buildTree(int[] inorder, int[] postorder) {
if(inorder.length==0) return null;
TreeNode root=new TreeNode(postorder[postorder.length-1]);
int pos=0;
for(int i=0;i<inorder.length;i++) {
if(inorder[i]==postorder[inorder.length-1]) {
pos=i;
break;
}
}
int[] leftinorder=new int[pos];
int[] leftpostorder=new int[pos];
for(int i=0;i<pos;i++) {
leftinorder[i]=inorder[i];
leftpostorder[i]=postorder[i];
}
int[] rightinorder=new int[inorder.length-pos-1];
int[] rightpostorder=new int[inorder.length-pos-1];
for(int i=0;i<inorder.length-pos-1;i++) {
rightinorder[i]=inorder[pos+i+1];
rightpostorder[i]=postorder[pos+i];
}
//System.out.println(root.val);
root.left=buildTree(leftinorder, leftpostorder);
root.right=buildTree(rightinorder, rightpostorder);
return root;
}
}