劍指offer 面試題8 二叉樹的下一個節點

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

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;
        }
    }
};
發佈了94 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章