题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
分情况讨论:
- C有右子树,下一节点是B(右子树的最左节点)
- B没有右子树,下一节点是D(B是D的左孩子,下一节点就是father)
- D也没有右子树,下一节点是F(D是C的右孩子,C是F的左孩子,下一节点是第一个成为父节点的左孩子的父节点)
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode==NULL) return NULL;//
if(pNode->right!=NULL)
{
TreeLinkNode* dumy = pNode->right;//
while(dumy->left!=NULL)
{
dumy=dumy->left;
}//找到根节点
return dumy;
}//如果该节点存在右孩子,那么下一节点是右子树的最左节点
while(pNode->next!=NULL)没右子树,则找第一个当前节点是父节点左孩子的节点
{
TreeLinkNode* dumy = pNode->next;//
if(pNode==dumy->left)
{
return dumy;
}
pNode=pNode->next;
}
return NULL;
}