根据先序遍历与中序遍历重建二叉树

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/muzhixi/article/details/87968468

首先找到根结点,然后将先序遍历与中序遍历数组切割为两部分,分治为左右子树重建问题。

public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        return reConstructBinaryTreeII(pre,0,pre.length,in,0,in.length);
    }
public static TreeNode reConstructBinaryTreeII(int[] pre,int preStart,int preStop,int[] in,int inStart,int inStop){
        if(preStart>=preStop||inStart>=inStop) return null;
        TreeNode root=new TreeNode(pre[preStart]);
        for(int i=inStart;i<inStop;i++){
            if(in[i]==pre[preStart]){
                root.left=reConstructBinaryTreeII(pre,preStart+1,preStart+1+i-inStart,in,inStart,i);
                root.right=reConstructBinaryTreeII(pre,preStart+1+i-inStart,preStop,in,i+1,inStop);
                break;
            }
        }
        return root;
    }

猜你喜欢

转载自blog.csdn.net/muzhixi/article/details/87968468