给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
public class Solution {
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;
}
//当前节点父节点不为空
while (pNode.next != null){
TreeLinkNode root = pNode.next;
//如果当前节点为父节点的左孩子,则返回父节点
if(pNode == root.left){
return root;
}
//设置当前节点为父节点
pNode = pNode.next;
}
return null;
}
}