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

面试题7-二叉树重构建

作者: 小庄bb | 来源:发表于2017-09-03 12:05 被阅读13次

    题目要求

    输入二叉树的前序遍历和中序遍历结果,重建二叉树,假设前序和中序遍历中都不含有重复的数字, 例如输入的前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}重建出二叉树。

    题目解析

    思路一:

    • 分析

    对先序与中序进行分析
    先序:1,2,4,7,3,5,6,8
    中序:4,7,2,1,5,3,8,6
    通过上面的先序序列,我们可以确定根节点的值为1
    通过中序序列我们可以知道,4,7,2属于左子树5,3,8,6属于右字树
    同样的方法我们可以得到左右字树当成一个整体去逐步构造。

    • 代码段
    public static BinaryTreeNode constructCore(int[] preOrder , int[] inOrder) throws Exception {
            
            if(preOrder == null || inOrder == null) {
                return null ;
            }
            
            if(preOrder.length != inOrder.length) {
                throw new Exception("长度不一样 , 非法的输入") ;
            }
            
            BinaryTreeNode root = new BinaryTreeNode() ;
            
            for(int i = 0 ; i < preOrder.length ; i++) {
                
                if(inOrder[i] == preOrder[0]) {
                    root.data = inOrder[i] ;
                    
                    System.out.println(root.getData());
                    
                    root.left = constructCore(Arrays.copyOfRange(preOrder, 1, 1+i) ,
                            Arrays.copyOfRange(inOrder, 0, i)) ;
                    root.right = constructCore(Arrays.copyOfRange(preOrder, i+1, preOrder.length) ,
                            Arrays.copyOfRange(inOrder, i, inOrder.length)) ;
                }
                
            }
            
            return root ;
            
        }
    

    测试代码

    public static void main(String[] args) {
            
            int[] preOrder = {1,2,4,7,3,5,6,8} ;
            int[] inOrder = {4,7,2,1,5,3,8,6} ;
            
            try {
                BinaryTreeNode root = constructCore(preOrder, inOrder) ;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    

    运行结果

    无测试结果


    看完整源码戳源码地址

    相关文章

      网友评论

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

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