时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:370932
本题知识点: 树
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
查找中序遍历下一个节点,
节点有右子树,下一个节点为右子树最左的元素;
节点处于左子树,下一个节点为父节点,若next即父节点的左子树等于该节点,那么其下一个元素就是该父节点
/*function TreeLinkNode(x){
this.val = x;
this.left = null;
this.right = null;
this.next = null; 父节点
}*/
function GetNext(pNode)
{
// write code here
if(pNode === null) return null
//节点有右子树,下一个节点为右子树最左的元素
if(pNode.right){
pNode = pNode.right
while(pNode.left){
pNode = pNode.left
}
return pNode
}
//节点处于左子树,下一个节点为父节点
while(pNode.next){
//等于左子树,那么按照中序遍历,下一个元素就是父节点
if(pNode == pNode.next.left){
return pNode.next
}
pNode = pNode.next
}
}
答案参考自:新一代的超人