美文网首页
面试题7:重建二叉树

面试题7:重建二叉树

作者: 夹小欣 | 来源:发表于2018-03-19 23:58 被阅读15次
        public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
            if(pre.length==0||in.length==0) return null;
            TreeNode root = new TreeNode(pre[0]);
            int ind = findInd(pre,in,pre[0]);
            return reConstructBinaryTree(pre,0,pre.length-1,in,0,in.length-1);
        }
        //递归构建树
        //pre数组的pb开始节点是当前的树根
        private static TreeNode reConstructBinaryTree(int[] pre,int pb,int pe,int[] in,int ib, int ie){
            if(pb>pe)
                return null;
            TreeNode head = new TreeNode(pre[pb]);
            // ind 确定树根在中序数组中的位置
                int ind = findInd(pre,in,pre[pb]);
            // 中序数组中,ind左边是当前根的左子树
            //左子树的位置是in[ib,ind-1],包含的节点个数是ind-ib
            // pre[pb]是当前的根,右边是他的子树,左子树从右边第一个起
            //在前序数组中,左子树的位置是pre[pb+1,pb+ind-ib]
                head.left = reConstructBinaryTree(pre,pb+1,ind-ib+pb,in,ib,ind-1);
                head.right = reConstructBinaryTree(pre,ind-ib+pb+1,pe,in,ind+1,ie);
            
            return head;
            
        }
        // val是pre中的值,返回val在in中的位置
        private static int findInd(int[] pre,int[] in,int val){
             for(int i=0;i<in.length;i++){
                 if(in[i]==val)
                     return i;
             }
            return -1;
        }
    

    相关文章

      网友评论

          本文标题:面试题7:重建二叉树

          本文链接:https://www.haomeiwen.com/subject/ltvmqftx.html