LeetCode每日一题:通过中序和后序建立二叉树

问题描述

Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.

问题分析

通过中序和后序来建立二叉树,不用考虑数组中有重复数字。
通过后序我们可以找到根节点(最后一个),用递归建树即可。

代码实现

public TreeNode buildTree(int[] inorder, int[] postorder) {
        if (inorder.length == 0 || postorder.length == 0) return null;
        return creatTree(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
    }

    private TreeNode creatTree(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]);
        for (int i = 0; i < postorder.length; i++) {
            if (inorder[i] == postorder[postEnd]) {//中序中找到根节点,处理左右孩子
                root.left = creatTree(inorder, inStart, i - 1, postorder, postStart, postStart - inStart + i - 1);
                root.right = creatTree(inorder, i + 1, inEnd, postorder, postStart - inStart + i, postEnd - 1);
            }
        }
        return root;
    }

你可能感兴趣的:(LeetCode每日一题:通过中序和后序建立二叉树)