• 已知二叉树的前序遍历和中序遍历的结果,重建二叉树


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

    测试用例:

    • 普通二叉树(完全二叉树、不完全二叉树)
    • 特殊二叉树(所有节点都没有右子节点的二叉树、所有节点都没有左子节点的二叉树)
    • 特殊二叉树测试(二叉树的根节点指针为NULL、输入的前序遍历序列和中序遍历序列不匹配)
    var preOrder = [1,2,4,7,3,5,6,8];
    var inOrder = [4,7,2,1,5,3,8,6];
    structCore(preOrder,inOrder);
    function structCore(preOrder,inOrder){
        if(preOrder == null || inOrder == null || inOrder.length == 0 ||preOrder.length != inOrder.length){
            return null;
        }
        var root = {
            value:null,
            left:null,
            right:null
        };
        root.value = preOrder[0];
        if(root.value == null){
            return;
        }
        var index = inOrder.indexOf(root.value);
        var leftInOrder = inOrder.slice(0,index);
        var rightInOrder = inOrder.slice(index+1);
        var leftPreOrder = preOrder.slice(1,leftInOrder.length+1);
        var rightPreOrder = preOrder.slice(leftInOrder.length+1);
        for(var i=0;i<leftInOrder.length;i++){
            if(leftPreOrder.indexOf(leftInOrder[i]) == -1){
                console.log("preOrder dose not match inOrder");
                return;
            }
        }
        for(var j=0;j<rightInOrder.length;j++){
            if(rightPreOrder.indexOf(rightInOrder[j]) == -1){
                console.log("preOrder dose not match inOrder");
                return;
            }
        }
        root.left = leftPreOrder[0];
        root.right = rightPreOrder[0];
        console.log(root);
        if(leftPreOrder.length>0 && root.value!=null){
            structCore(leftPreOrder,leftInOrder);
        }
        if(rightPreOrder.length>0 && root.value!=null){
            structCore(rightPreOrder,rightInOrder);
        }
    }
    

      另外:只有左子节点的二叉树的前序遍历序列和中序遍历序列是相反的。

         只有右子节点的二叉树的前序遍历序列和中序遍历序列是相同的。

  • 相关阅读:
    ZLL网关程序分析
    ZLL主机接口的信息处理流程
    TI Zigbee Light Link 参考设计
    基于能量收集的智能家居-2013国家级大学生创业实践项目申报_商业计划书_V0.2
    office excel 装Visual Studio后报错解决方案
    php随机生成验证码
    Mysql添加外键约束
    hdu 1232 畅通工程
    hdu 1162 Eddy's picture (Kruskal 算法)
    hdu 1102 Constructing Roads (Prim算法)
  • 原文地址:https://www.cnblogs.com/ymwangel/p/5878990.html
Copyright © 2020-2023  润新知