题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路
首先判断该结点有没有右子结点,若有,则一直遍历右子结点的左子节点,直至为NULL,则返回该左子结点
若结点没有右子结点,则向上一层,判断该结点是不是父结点的左孩子,若是,则返回父结点,若不是,则继续往上直至没有父结点,说明这个结点是最后一个结点,返回NULL
代码
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode == NULL)
return NULL;
if(pNode->right != NULL)
{
TreeLinkNode* tmp = pNode->right;
while(tmp->left != NULL)
tmp = tmp->left;
return tmp;
}
while(pNode->next != NULL)
{
TreeLinkNode* tmp = pNode->next;
if(tmp->left == pNode)
return tmp;
pNode = tmp;
}
return NULL;
}
};