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

问题描述

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

问题分析

和上一题类似,明白先序的第一个数就是根节点就好做了。

代码实现

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

    }

    private TreeNode creatTree2(int[] preorder, int preStart, int preEnd,
                                int[] inorder, int inStart, int inEnd) {
        if (preStart > preEnd || inStart > inEnd) return null;
        TreeNode root = new TreeNode(preorder[preStart]);
        for (int i = 0; i < inorder.length; i++) {
            if (inorder[i] == preorder[preStart]) {//中序中找到根节点,处理左右孩子
                root.left = creatTree2(preorder, preStart + 1, preStart - inStart + i, inorder, inStart, i - 1);
                root.right = creatTree2(preorder, preStart - inStart + i + 1, preEnd, inorder, i + 1, inEnd);
            }
        }
        return root;
    }

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