题目意思:
对于中序遍历的二叉树,求树种任意节点的下一个遍历节点。
这道题要写出来中序遍历的结果,发现规律。
考虑两个大情况:
- 当前节点有 右节点,那么当前节点的下一个节点 是从其右子节点出发,到达最左子节点。
- 当前节点没有右节点,循环 寻找到 其父节点,使得当前节点是父节点的左子节点,那么,父节点就是 原始当前节点的下一节点。
/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
}
};
*/
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if (pNode==nullptr)return nullptr;
if((pNode->right)!=nullptr)
{
TreeLinkNode* tmp = pNode->right;
while(tmp->left)
{
tmp = tmp->left;
}
return tmp;
}
else
{
while(pNode->next)
{
if (pNode->next->left==pNode)
{
return pNode->next;
}
pNode = pNode->next;
}
return nullptr;
}
}
};