前序遍历后续遍历还原二叉树

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}
public class BinaryCode {


    public static void main(String[] args) {

        int[] pre = {1,2,4,7,3,5,6,8};
        int[] in = {4,7,2,1,5,3,8,6};

        TreeNode treeNode = reConstructBinaryTree(pre, in);

        System.out.println(treeNode.toString());
    }

    public static TreeNode reConstructBinaryTree(int [] pre, int [] in) {

        if(pre == null || pre.length == 0){
            return null;
        }
        int root = pre[0];

        TreeNode node = new TreeNode(root);

        int rootIndex = -1;
        for (int i = 0; i < in.length; i++) {
            if(in[i] == root){
                rootIndex = i;
            }
        }
        if(rootIndex < 0){
            return null;
        }

        int[] leftInTree = Arrays.copyOfRange(in,0,rootIndex);
        if(leftInTree.length > 0){
            int[] leftPreTree = Arrays.copyOfRange(pre,1,leftInTree.length+1);
            if(leftPreTree.length > 0){
                node.left = reConstructBinaryTree(leftPreTree,leftInTree);
            }
        }
        int[] rightInTree = Arrays.copyOfRange(in,rootIndex+1,in.length);
        if(rightInTree.length>0){
            int[] rihtPreTree = Arrays.copyOfRange(pre,pre.length-rightInTree.length,pre.length);
            if(rihtPreTree.length > 0){
                node.right = reConstructBinaryTree(rihtPreTree,rightInTree);
            }

        }

        return node;
    }


}

 

posted @ 2019-11-29 17:41  不吃柠檬  阅读(198)  评论(0编辑  收藏  举报