題目描述
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。
tips:1. 若該節點有右子樹,則下一個節點是改子樹的最左子節點
2. 若該節點無右子樹,則下一個節點:順着父節點遍歷上去,知道找到一個節點是父節點的左子節點。
/*
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==NULL) {
return NULL;
}
if(pNode->right==NULL) {
TreeLinkNode* pParent=pNode;
while(pParent->next!=NULL) {
if(pParent->next->left==pParent) {
return pParent->next;
}
pParent=pParent->next;
}
return NULL;
} else {
TreeLinkNode* pRight=pNode->right;
while(pRight->left!=NULL) {
pRight=pRight->left;
}
return pRight;
}
}
};