题解 | #二叉树的下一个结点#

二叉树的下一个结点

http://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

javaScript 题解:
分为三大种情况:
    一、该节点有右子树
    二、该节点无右子树,但是有父节点。(又分两种情况)
    三、该节点无右节点,也没有父节点。
/*function TreeLinkNode(x){
    this.val = x;
    this.left = null;
    this.right = null;
    this.next = null;
}*/
function GetNext(pNode)
{
    if(pNode === null)return null;
    let res; //用于存结果

    //1.该节点有右子树的处理方式
    if(pNode.right){
        res = pNode.right;
        while(res && res.left){
            res = res.left;
        }
    }
    //定义一个函数,用于判断某个节点是否是它父节点的左子节点
     function isLeft(p){
        if(p.next){
            return p.next.left === p;
        }
         return false;
    }
    //2.1该节点无右子树,但是有父节点时
    if(!pNode.right && pNode.next){
        //2.1.1该节点是其父节点的左子节点时,返回其父节点
        if(isLeft(pNode)){
            res = pNode.next;
        }
        //2.1.2该子节点是其父节点的右子节点时,往上查找
        if(!isLeft(pNode)){
            let newNode = pNode.next;
            while(newNode.next && !isLeft(newNode)){
                newNode = newNode.next;
            }
            res = newNode.next;
        }

    }

    //2.2该节点无右子树,也没有父节点时,直接返回null
    if(!pNode.right && !pNode.next){
        res = null;
    }
   return res;

}
全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务