题目
Given inorder and postorder traversal of a tree, construct the binary tree.
Note: You may assume that duplicates do not exist in the tree.
思路
后序遍历中,最后一个节点是根节点,在中序遍历中根节点的左边是左子树,右边是右子树。实现上采用递归的方式。
代码
/**
* 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[] inorder, int[] postorder) {
return buildTreeFromTraversal(inorder,0,inorder.length-1,postorder,0,postorder.length-1);
}
public TreeNode buildTreeFromTraversal(int[] inorder,int inLeft,
int inRight,int[] postorder,int postLeft,int postRight){
if(inLeft > inRight || postLeft > postRight)
return null;
int rootVal = postorder[postRight];
TreeNode rootNode = new TreeNode(rootVal);
int rootIndex = inLeft;
while(inorder[rootIndex] != rootVal)
rootIndex++;
rootNode.left = buildTreeFromTraversal(inorder,inLeft,
rootIndex-1,postorder,postLeft,postLeft+rootIndex-inLeft-1);
rootNode.right = buildTreeFromTraversal(inorder,rootIndex+1,
inRight,postorder,postLeft+rootIndex-inLeft,postRight-1);
return rootNode;
}
}