这道题的思路是这样的, 首先根据节点是否有右子树, 有的话找到右子树的最左结点返回,
没有的话 可以再进一步思考这个节点的3种情况
1.是父节点的左孩子
这种情况返回父节点
2.是父节点的右孩子
(1)如果父节点是爷爷节点的左孩子,那么返回爷爷节点,
(2)如果父节点是爷爷节点的右孩子, 再看爷爷节点是不是祖父的左孩子,是就返回祖父, 不是的话再往上继续找
3.没有父节点。
在没有右子树且没有父节点的情况显然他没有下一个节点返回null;
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if(pNode == null) {
return null;
}
if(pNode.right!= null) {
pNode = pNode.right;
while(pNode.left != null) {
pNode = pNode.left;
}
return pNode;
} else {
while(pNode.next != null) {
if(pNode.next.left == pNode) {
return pNode.next;
}
pNode = pNode.next;
}
return null;
}
}