算法系列——重建二叉树

Posted BridgeGeorge

tags:

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

题目

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

思路

前序遍历列表:第一个元素永远是 【根节点 (root)】
中序遍历列表:根节点 (root)【左边】的所有元素都在根节点的【左分支】,【右边】的所有元素都在根节点的【右分支】
算法思路:

通过【前序遍历列表】确定【根节点 (root)】
将【中序遍历列表】的节点分割成【左分支节点】和【右分支节点】
递归寻找【左分支节点】中的【根节点 (left child)】和 【右分支节点】中的【根节点 (right child)】

解答

class Solution 
    public TreeNode buildTree(int[] preorder, int[] inorder) 
        if(preorder.length==0|| inorder.length==0)
            return null;
        
        TreeNode node=new TreeNode(preorder[0]);
        for(int i=0;i<inorder.length;i++)
            if(preorder[0]==inorder[i])
                node.left= buildTree(Arrays.copyOfRange(preorder,1,i+1),Arrays.copyOfRange(inorder,0,i));
                node.right=buildTree(Arrays.copyOfRange(preorder,i+1,preorder.length),Arrays.copyOfRange(inorder,i+1,inorder.length));
                break;
            
        
        return node;
        
    


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

算法系列——重建二叉树

算法系列——重建二叉树

算法题17 重建二叉树

剑指offer系列——重建二叉树

算法入门06重建二叉树

算法之重建二叉树