首页 > 其他 > 详细

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

时间:2019-11-29 19:24:41      阅读:71      评论:0      收藏:0      [点我收藏+]
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;
    }


}

 

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

原文:https://www.cnblogs.com/yongjixl/p/11959250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!