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
};