題目鏈接:二叉樹的下一個結點
題意:
給一個二叉樹中的一個結點,輸出此結點中序遍歷情況下的下一個結點
解題思路;
在二叉樹中,中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。
三種情況:
1. 如果當前結點有右子樹,那麼下一個結點就是右子樹的最左節點
2. 如果沒有右子樹
(1)如果該節點爲 該父節點的左孩子,那麼下一個結點就是 該父節點
(2)往上遍歷,知道滿足上面的情況
3. 前兩種都不符合,說明此節點爲最後一個點,返回NULL
/*
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){ // 有右子樹
pNode = pNode->right;
while(pNode->left != NULL){ // 查找最左節點
pNode = pNode->left;
}
return pNode;
}
else{
while(pNode->next != NULL){
if(pNode->next->left == pNode){ // 該節點爲它父節點的左孩子
return pNode->next;
}
pNode = pNode->next; // 向上遍歷
}
return NULL; // 該節點爲最後一個點
}
}
};