问题形貌
给定一个二叉树和个中的一个结点,请找出中序遍历递次的下一个结点而且返回。注重,树中的结点不仅包括摆布子结点,同时包括指向父结点的指针。
剖析
关于二叉树中序遍历来讲,某node的下一个节点能够分为以下几种状况:
- node.right 不为 null时,依据中序遍历的定义,下一个节点则是node右子树里最左侧的节点。
- node.right 为 null时,考核node是不是为node.parent的左节点,如果是的话,node的下一个节点就是node.parent;不然,考核node.parent是不是为node.parent.parent的左节点,顺次如许向上探究下去。
代码完成
/*function TreeLinkNode(x){
this.val = x;
this.left = null;
this.right = null;
this.next = null;
}*/
function GetNext(node)
{
if(node === null)
return null;
if(node.right !== null){
node = node.right;
while(node.left !== null){
node = node.left;
}
return node;
}else{
while(node.next !== null){
if(node === node.next.left)
return node.next;
node = node.next;
}
}
return null;
}