安全面に関する質問は、次のノードのバイナリツリーを提供することを証明8

問題:バイナリツリーとなっているノードを考えると、先行順走査順序とリターンに次のノードを見つけます。ツリー内のノードは、左と右の子ノードではないだけを含むことに注意してください、親ノードは、を指すポインタが含まれています。

入力:バイナリツリー内のノードポインタ

出力:次のノードへのポインタ

アイデア:

ノードが持っている場合は右の子を、それが一番左のノードの右部分木の次のノードです。

ノードは、ときに右のサブツリーではない、それはの親である左の息子が、それは次のノードの親ノードです。

ノードは、ときに右のサブツリーではない、それはの親である右の息子、それは次のノード(あなたは左のサブツリーの親ノードとしてノードを見つけるまで、親を遡及)、のいずれか(としてのどちらかであります遡及されていない場合、)nullptrを比較しました。

コード:

/*
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->next==nullptr)  初始为了只有一个节点,考虑,但其实是多虑了,反而会影响判断。
        //    return nullptr;
        TreeLinkNode* result;
        if(pNode->right!=nullptr)
        {
            result = pNode->right;
            while(result->left!=nullptr)
            {
                result = result->left;
            }
            return result;
        }
        if(pNode->next!=nullptr&&pNode->next->left==pNode)
            return pNode->next;
        if(pNode->next!=nullptr&&pNode->next->right==pNode)  // 这里不能用else,else包含的情况太多了
        {
            if(pNode->next!=nullptr)
                result = pNode->next;
            while(result->next!=nullptr&&result->next->right==result)
            {
                result= result->next;
            }
            return result->next;
        }
        return nullptr;
    }
};

第二及び第三節上記は以下のコードで置き換えることができる場合。

 else if(pNode->m_pParent != nullptr)
    {
        BinaryTreeNode* pCurrent = pNode;
        BinaryTreeNode* pParent = pNode->m_pParent;
        while(pParent != nullptr && pCurrent == pParent->m_pRight)  // 向上追溯节点为父节点的左子树的父节点
        {
            pCurrent = pParent;
            pParent = pParent->m_pParent;
        }

        pNext = pParent;
    }

 

複雑分析: O(N)の時間計算量は、空間的複雑度はO(1)です。

トピック:もう一つのアイデア:削減シーケンス先行順バイナリツリー短所:ここではスペースの複雑さ、少し導入が増加します。

 
公開された56元の記事 ウォン称賛10 ビュー6802

おすすめ

転載: blog.csdn.net/qq_22148493/article/details/104345775