1. 程式人生 > >LeetCode-Construct Binary Tree From Inorder And Postorder Traversal

LeetCode-Construct Binary Tree From Inorder And Postorder Traversal

一、Description

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

題目大意:給定一個二叉樹的中序與後序遍歷序列,構建這棵樹並返回根結點。

For example, given

inorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]

Return the following binary tree:

    3
   / \
  9  20
    /  \
   15   7

二、Analyzation

這個題與上一篇中的題目做個對比,程式碼框架大致相同,基本思路可參考:

Construct Binary Tree From Preorder And Postorder Traversal


三、Accepted code

class Solution {
    Map<Integer, Integer> map = new HashMap<>();
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        for (int i = 0; i < inorder.length; i++) {
            map.put(inorder[i], i);
        }
        return help(inorder, postorder, 0, inorder.length - 1, 0, postorder.length - 1);
    }
    public TreeNode help(int[] inorder, int[] postorder, int a, int b, int c,int d) {
        if (a > b || c > d) {
            return null;
        }
        TreeNode root = new TreeNode(postorder[d]);
        if (a == b || c == d) {
            return root;
        }
        int index = map.get(postorder[d]);
        int len = index - a;
        root.left = help(inorder, postorder, a, index - 1, c, c + len - 1);
        root.right = help(inorder, postorder, index + 1, b, c + len, d - 1);
        return root;
    }
}