美文网首页
LeetCode 105. 从前序与中序遍历序列构造二叉树

LeetCode 105. 从前序与中序遍历序列构造二叉树

作者: 陈陈chen | 来源:发表于2021-09-01 15:44 被阅读0次

1、题目

image.png

2、分析

参考labuladong写的:https://mp.weixin.qq.com/s/OlpaDhPDTJlQ5MJ8tsARlA
最重要的是把图画出来,然后把索引的起始位置、最终位置找出来。最后记得加上递归的结束条件。

3、代码

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

    private TreeNode build(int[] preorder, int preStart, int preEnd, 
                           int[] inorder, int inStart, int inEnd){
        if (preStart > preEnd){
            return null;
        }
        int rootVal = preorder[preStart];
        int index = -1;
        for (int i = inStart; i <= inEnd; i++){
            if (rootVal == inorder[i]){
                index = i;
                break;
            }
        }

        TreeNode root = new TreeNode(rootVal);
        root.left = build(preorder, preStart + 1, preStart + index - inStart,
                          inorder, inStart, index - 1);
        root.right = build(preorder, preStart + index - inStart + 1, preEnd,
                           inorder, index + 1, inEnd);
        return root;
    }
}

相关文章

网友评论

      本文标题:LeetCode 105. 从前序与中序遍历序列构造二叉树

      本文链接:https://www.haomeiwen.com/subject/ehnxwltx.html