劍指offer:求二叉樹當前節點的在中序遍歷中的下一個節點

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。

 

/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
*/
// 分析問題:
//    1.當前節點如果是在左子樹上則有:
//                          1.如果有右邊子樹,則下一個節點爲右子樹的最左節點
//                          2.否則,向上找使得當前分支爲其左子樹的父親節點
//    2. 如果爲只有右子樹的節點,則返回爲空,說明爲最後一個節點
class Solution {
public:
     TreeLinkNode* getRightLeft(TreeLinkNode* pNode) {
         if (pNode->left == NULL) return pNode;
         else return  getRightLeft(pNode->left);
     }
    
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if(pNode == NULL) return NULL;
        TreeLinkNode* t = NULL;
        if(pNode->right !=NULL) {
            return getRightLeft(pNode->right);
        }
        
        while(pNode->next != NULL) {
            TreeLinkNode *q = pNode->next;
            if(q->left == pNode) {
                t = q;
                break;
            }
            pNode = q;
        }
        return t;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章