題目描述
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。
/*
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;
}
TreeLinkNode* pNext = nullptr;
//存在右子樹的情況
if(pNode -> right != nullptr) {
TreeLinkNode* pRight = pNode -> right;
while(pRight -> left != nullptr) {
pRight = pRight -> left;
}
pNext = pRight;
}
//無右子樹的情況, else千萬不能少,必須先判斷無右子樹
else if(pNode -> next != nullptr) {
TreeLinkNode* pCurrent = pNode;
TreeLinkNode* pParent = pNode -> next;
while(pParent != nullptr && pParent -> left != pCurrent) {
pCurrent = pParent;
pParent = pParent -> next;
}
pNext = pParent;
}
return pNext;
}
};