LeetCode-Construct Binary Tree From Inorder And Postorder Traversal

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Apple_hzc/article/details/83544308

一、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;
    }
}

猜你喜欢

转载自blog.csdn.net/Apple_hzc/article/details/83544308