Construct Binary Tree from Inorder and Postorder Traversal

来源:互联网 发布:淘宝模块装修教程啊毛 编辑:程序博客网 时间:2024/06/07 02:41

Given inorder and postorder traversal of a tree, construct the binary tree.

 Notice

You may assume that duplicates do not exist in the tree.

Given inorder [1,2,3] and postorder [1,3,2], return a tree:

  2 / \1   3
/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */  public class Solution {    /**     *@param inorder : A list of integers that inorder traversal of a tree     *@param postorder : A list of integers that postorder traversal of a tree     *@return : Root of a tree     */    public TreeNode buildTree(int[] inorder, int[] postorder) {        if(inorder.length == 0 || postorder.length == 0) {            return null;        }        return construct(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);    }        private TreeNode construct(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart, int postEnd) {        if(inStart > inEnd || postStart > postEnd) {            return null;        }        TreeNode root = new TreeNode(postorder[postEnd]);        int position = 0;        for(int i = 0; i < inorder.length; i++) {            if(inorder[i] == postorder[postEnd]) {                position = i;            }        }        int leftLength = position - inStart;        root.left = construct(inorder, inStart, position - 1, postorder, postStart, postStart + leftLength - 1);//be careful about the index        root.right = construct(inorder, position + 1, inEnd, postorder, postStart + leftLength, postEnd - 1);        return root;    }}


0 0