给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
1.二叉树为空,则返回空。
2.结点的右孩子存在,从右孩子出发,找到右孩子的最左孩子结点。
3.如果不是根结点,判断该结点是其父结点的左孩子,那么返回父结点,重复之前的判断,返回!
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode==nullptr)
return pNode;
if(pNode->right!=nullptr)
{
pNode=pNode->right;
while(pNode->left)
pNode=pNode->left;
return pNode;
}
while(pNode->next)
{
if(pNode->next->left==pNode)
return pNode->next;
pNode=pNode->next;
}
return nullptr;
}
};