劍指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) {
        
    }
};
*/
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if(pNode==NULL) return NULL;  
  
        TreeLinkNode* pNext=NULL;  
        if(pNode->right)//有右子樹,找到右子樹的最左的結點  
        {  
            pNode=pNode->right;  
            while(pNode->left) pNode=pNode->left;  
            pNext=pNode;  
        }  
        else if(pNode->next)
        {  
            TreeLinkNode* pParent=pNode->next;  
            while(pParent && pNode==pParent->right)  
            {  
                pNode=pParent;  
                pParent=pParent->next;  
            }  
            pNext=pParent;  
        }  
  
        return pNext;  
    }
};








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