蠡口116。各ノードで次の右ポインタの取り込み

出会いのツリー構造は、最初に考えたのは、再帰的です。再帰を使用してこの問題。すべてのノードへの次のポインタを追加するために、我々は、2つのステップで達成:1.各右端サブツリー左- >各左端右サブツリー ; 関数は、再帰的検索を追加するには、2、左と右のサブツリーを、図に示すように、(。 )。木の周りの両方の子が逆であってもよいが、両方が必要であり、書き込み専用機能をツリーの次のレベル(孫ツリー)の子供について、そう互いに独立してトラバースするとき、右側の再帰= left.next場合ができません接続を確立します。各層は、接続を確立する必要があります。

 

Hそれは完全二分木所与のバイナリツリー(すべてのノードが二人の子供、およびノードツリーの高さと同じレベルを有する)であるので、仮定ツリー高さh、そう=ログ:最初の時間複雑性を分析するためのコードを見る前に2 nは、nはノードの数です。

  T(H)= O(H-1)+ 2 * T(H-1)

    = O(H-1)+ 2 * O(H-2)+ 4 * T(H-2)

    = ... =ΣO(K・2 H-K-1)(k = 1〜H-1)

    O =(2つのH-1、SK 2; -k

    O =(2 H. 1-・(2-2 2-H - (1-H)2 。1-H ))#導出下記参照、減算転位、最初のn個のアイテム等比級数と式を使用します。二人はしばしばツリーアルゴリズムの複雑さの解析に用いました。

    = O(2 H -h-1)

    =O(2h)=O(n)

 

代码如下:

class Solution(object):
    def connect(self, root):
        """
        :type root: Node
        :rtype: Node
        """
        if root==None: return(None)
        left,right=root.left,root.right
        while left:
            left.next=right
            left=left.right
            right=right.left
        self.connect(root.left)
        self.connect(root.right)
        return(root)

 

おすすめ

転載: www.cnblogs.com/Leisgo/p/11706448.html