二叉樹的下一個節點

題目描述

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。
/*
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;
    }
};

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