2.3.4 树

作者: Ching_Lee | 来源:发表于2018-05-24 20:35 被阅读0次

面试题7:重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
主要使用递归的思想,在前序遍历的数组中最先出现的就是根节点,然后我们遍历中序序列,找到根节点的值,左边的就是左子树,递归求左子树的根节点,赋值给root.left;右边就是右子树,递归求右子树的根节点,赋值给root.right。

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} */
function reConstructBinaryTree(pre, vin)
    {
        let root= ConstructBinaryTree(pre,0,pre.length-1,vin,0,vin.length-1);
       return root;
    }

    function ConstructBinaryTree(pre,preStartIndex,preEndIndex,vin,vinStartIndex,vinEndIndex){
        if(preStartIndex>preEndIndex||vinStartIndex>vinEndIndex)
            return null;
        //从先序中得到根节点
        let root=new TreeNode(pre[preStartIndex]);
        //然后在中序中遍历,找到根节点的位置,左边是左子树,右边是右子树
        for(let i=vinStartIndex;i<=vinEndIndex;i++){
            if(pre[preStartIndex]===vin[i]){
                //结束索引preStartIndex+i-vinStartIndex,刚好是左子树结束的位置
                root.left=ConstructBinaryTree(pre,preStartIndex+1,preStartIndex+i-vinStartIndex,vin,vinStartIndex,i-1);
                root.right=ConstructBinaryTree(pre,preStartIndex+i-vinStartIndex+1,preEndIndex,vin,i+1,vinEndIndex);
                break;
            }

        }
        return root;
    }

面试题8:二叉树的下一个节点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
主要的解决思想
1.该节点有右子树,那么该节点的下一个节点就是右子树中最左的节点
2.该节点没有右子树,那么该节点的下一个节点就是,第一个当前节点是父节点左孩子的节点

function GetNext(pNode)
{
    if(pNode===null)
        return null;
    // write code here
    //如果该节点有右子树,那么该节点的下一个节点,就是右子树最左的节点
    if(pNode.right){
        let root=pNode.right;
        while(root.left){
            root=root.left;
        }
        return root;
    }
    //没右子树,则找第一个当前节点是父节点左孩子的节点,这里的next其实是parent
     while(pNode.next){ 
            if(pNode.next.left===pNode) 
                return pNode.next;
            pNode = pNode.next;
        }
    return null;
    
}

相关文章

  • 2.3.4 树

    面试题7:重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 作业2.3.4

    对老公的三个肯定: 1.上了一整天的课很辛苦,老公没有抱怨并在整个上课过程中有认真听课,肯定他对学习的认真态度 2...

  • No handler for type [text] decla

    上面这个rest请求在2.3.4版本的es服务器上会执行失败,原因是es 2.3.4上面还没有text这种类型,"...

  • Linux Elasticsearch环境搭建

    环境 Ubuntu 16.04.5 LTS Elasticsearch 2.3.4 java 1.8.0_152 ...

  • 3月2.3.4

    周末懈怠了,起床晚了。 驾照,专业课,四级,二级,老师的教案制作。 这几天一直很忙。虽然具体实施没有那么理想,但还...

  • vue mismatch解决方法

    部署代码时报下面的错误: Vue packages version mismatch: - vue@2.3.4 -...

  • Spring Boot教程(二):入门Helloworld

    Helloword基础环境 JDK8 Maven 3.6.1 Spring Boot 2.3.4.RELEASE ...

  • ipa包重新签名

    软件环境 Mac: v10.12.6 (16G29) ruby: v2.3.4 rvm: ...

  • Android极光认证配置

    更新日期:2020.07.02依赖版本:'cn.jiguang.sdk:jcore:2.3.4''cn.jigua...

  • Cocos Creator 图集 (TexturePacker、

    版本:2.3.4 参考 : cocos教程:自动图集功能[https://docs.cocos.com/creat...

网友评论

      本文标题:2.3.4 树

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