[leetcode]Construct Binary Tree from Inorder and Postorder Traversal

简单的递归。命名上用了inLow, inHigh这样的觉得比较好。

public class Solution {
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        if (inorder.length != postorder.length) return null;
        return buildTree(inorder, 0, inorder.length-1, postorder, 0, postorder.length-1);
    }
    
    private TreeNode buildTree(int[] inorder, int inLow, int inHigh, int[] postorder, int postLow, int postHigh)
    {
        if (inHigh - inLow < 0) return null;
        TreeNode root = new TreeNode(postorder[postHigh]);
        int c = -1;
        for (c = inLow; c <= inHigh; c++)
        {
            if (inorder[c] == postorder[postHigh]) break;
        }
        // split into two parts
        int len = c - inLow;
        root.left = buildTree(inorder, inLow, c-1,
                            postorder, postLow, postLow+len-1);
        root.right = buildTree(inorder, c+1, inHigh,
                            postorder, postLow+len, postHigh-1);
        return root;
    }
}

  

原文地址:https://www.cnblogs.com/lautsie/p/3298794.html