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

二叉树的下一个结点

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

1. 第一种方法

写出树的中序遍历

// function TreeLinkNode(x){
//     this.val = x;
//     this.left = null;
//     this.right = null;
//     this.next = null;
// }
var zlist = []
function GetNext(pNode)
{
    // write code here
    var newnode = pNode
    while(newnode.next !== null) {
        newnode = newnode.next
    }
    InOrder(newnode)
    var pindex = zlist.indexOf(pNode)
    return zlist[pindex + 1]
}
function InOrder(node) {
    if(node !== null) {
        InOrder(node.left)
        zlist.push(node)
        InOrder(node.right)
    }
    
}
module.exports = {
    GetNext : GetNext
};

2. 第二种方法(寻找结点的下一结点)

分为三种情况:

有右子树

无右子树,在左节点

无右子树,在右结点

/*function TreeLinkNode(x){
    this.val = x;
    this.left = null;
    this.right = null;
    this.next = null;
}*/
function GetNext(pNode)
{
    // write code here
    //有右子树
    if(pNode.right!==null) {
        var newnode = pNode.right
        while(newnode.left !== null) {
            newnode = newnode.left
        }
        return newnode
    }
    // 没有右子树
    else {
        if(pNode.next === null) {return null}
         // 在左结点
        if(pNode.next.left === pNode) {
            return pNode.next
        }
        // 在右结点
        else{
            var newnode = pNode
            while(newnode.next.left !== newnode) {
                newnode = newnode.next
                if(newnode.next === null) {
                    return null
                }
            }
            return newnode.next
        }
    }
}
module.exports = {
    GetNext : GetNext
};
全部评论

相关推荐

11-27 21:29
已编辑
武汉理工大学 Java
点赞 评论 收藏
分享
10-27 02:29
已编辑
门头沟学院 嵌入式工程师
牛客72783561...:简历不是这么写的,你这两个项目只说了用到了什么技术,却没说取得了什么成果,在我看来这就是你自己做的一个demo,没有价值。你为什么不写你电赛国二的那个项目?
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

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