题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题解:中序遍历是左中右
分两种情况:
①pNode的右子树为空,则向上回溯,直到找到该结点的左子结点与当前结点是同一结点,则该结点即为pNode的下一个结点
②pNode的右子树不为空,则向下遍历,找到pNode的右结点的左叶子结点
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if (pNode == NULL || (pNode->left==NULL && pNode->right==NULL && pNode->next==NULL))
return NULL;
if (pNode->right == NULL)
{
while (pNode->next && pNode->next->left != pNode)
pNode = pNode->next;
return pNode->next;
}
else if (pNode->right)
{
pNode = pNode->right;
while (pNode->left)
pNode = pNode->left;
return pNode;
}
}
};