Leetcode——重建二叉树

Posted Yawn,

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode——重建二叉树相关的知识,希望对你有一定的参考价值。

1.题目

2. 题解

二叉树中不能有重复元素!

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
        return helper(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
    }

    public TreeNode helper(int[] preorder, int preLeft, int preRight, int[] inorder, int inLeft, int inRight) {
        // 递归终止条件
        if (inLeft > inRight || preLeft > preRight) 
            return null;

        // val 为前序遍历第一个的值,也即是根节点的值
        // idx 为根据根节点的值来找中序遍历的下标
        int idx = inLeft, val = preorder[preLeft];
        TreeNode root = new TreeNode(val);

        for (int i = inLeft; i <= inRight; i++) {
            if (inorder[i] == val) {
                idx = i;
                break;
            }
        }

        // 根据 idx 来递归找左右子树,始终保持左闭右开的区间原则

		//idx - inLeft:左子树长度
        root.left = helper(preorder, preLeft + 1, preLeft + (idx - inLeft), inorder, inLeft, idx - 1);
        root.right = helper(preorder, preLeft + (idx - inLeft) + 1, preRight, inorder, idx + 1, inRight);
        return root;
    }
}

以上是关于Leetcode——重建二叉树的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-重建二叉树-83

LeetCode(剑指 Offer)- 07. 重建二叉树

Leetcode——重建二叉树

[LeetCode]剑指 Offer 07. 重建二叉树

LeetCode-重建二叉树(前序遍历+中序遍历)

leetcode刷题(133)——剑指 Offer 07. 重建二叉树