出会いのツリー構造は、最初に考えたのは、再帰的です。再帰を使用してこの問題。すべてのノードへの次のポインタを追加するために、我々は、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)