给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode node)
{
if (node == null) {
return;
}
if (node.right != null) { // 如果当前节点有右子树,则返回右子树的最左节点
// 参考图中的 B 节点
node = node.right;
while(node.left != null)
node = node.left;
return node;
}
while(node.next != null){ // 如果没有右子树,找到第一个把 node 当做 左孩子 的节点
// 参考图中的 H 节点
if (node.next.left == node) {
return node.next;
}
node = node.next;
}
return null; // 退到根节点仍没有找到
// 参考图中的 M 节点
}
}