javaleetcode105.从前序和中序遍历序列构造二叉树

Posted Java第一傻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaleetcode105.从前序和中序遍历序列构造二叉树相关的知识,希望对你有一定的参考价值。

问题描述

leetcode105.从前序和中序遍历序列构造二叉树


题目分析:

构造二叉树,第一件事一定是找根节点,然后想办法构造左右子树。将inorder[]对应关系存入HashMap中,已知preorder[]的第一个元素是二叉树的根节点,那么可根此将inorder[]分为三部分:
之后将root.left也可分为三部分,root.right也可分为三部分,通过递归可使问题得到最终解决。


代码实现:

class Solution 
    HashMap<Integer,Integer> map=new HashMap<>();
    public TreeNode buildTree(int[] preorder, int[] inorder)
        for (int i = 0; i < inorder.length; i++) 
            map.put(inorder[i],i);
        
        return
            rebuild(preorder, 0, preorder.length - 1,
                    inorder, 0, inorder.length - 1);
    

    public TreeNode rebuild(int[] preorder, int preStart, int preEnd,
                   int[] inorder, int inStart, int inEnd)
        if(preStart>preEnd||inStart>inEnd)
            return null;
        
        int rootval=preorder[preStart];
        int index=map.get(rootval);
        int leftsize=index-inStart;
        TreeNode root=new TreeNode(rootval);
        root.left=rebuild(preorder, preStart + 1, preStart + leftsize,
                inorder, inStart, index - 1);
        root.right = rebuild(preorder, preStart + leftsize + 1, preEnd,
                inorder, index + 1, inEnd);
        return root;
        
    


以上是关于javaleetcode105.从前序和中序遍历序列构造二叉树的主要内容,如果未能解决你的问题,请参考以下文章

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

LeetCode(105):从前序与中序遍历序列构造二叉树

二叉树经典题之从前序和中序遍历构建二叉树

LeetCode Java刷题笔记—105. 从前序与中序遍历序列构造二叉树

[LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树

剑指Offer - 面试题7:重构二叉树 (力扣 - 105从前序与中序遍历序列构造二叉树)