Pythonのジグザグラベル付き二分木のパス
すべてのノードに2つの子がある無限の二分木で、ノードに行順にラベルが付けられているとします。奇数行(1、3、5、...)では、ラベル付けは左から右になり、偶数行(2、4、6、...)では、ラベル付けは右から左になります。 。したがって、ツリーは次のようになります-
したがって、このツリーでノードのラベルを付けたので、ツリーのルートからそのラベルの付いたノードまでのパスでラベルを見つける必要があります。したがって、入力がlabel =14の場合、出力は[1,3,4,14]
になります。これを解決するには、次の手順に従います-
-
2つの配列ツリーと解像度を定義し、ツリー配列に0と1を挿入し、奇数:=1と現在:=1と2:=2
を設定します。 -
label =1の場合、単一の要素1を含むリストを返します。
-
1つの無限ループを作成します-
-
奇数がゼロ以外の場合、
-
max_val:=現在+2
-
temp:=max_val
-
一時的>現在
-
ツリーに温度を挿入
-
temp =labelの場合、ループから出てきます
-
温度を1下げる
-
-
ツリーの最後の要素がラベルの場合、ループから出てきます
-
現在:=max_val
-
-
それ以外の場合
-
temp:=two
-
温度がゼロではない間
-
temp:=1、電流を1増やしてから、ツリーへの電流を増やします
-
current =labelの場合、ループから出てきます
-
-
ツリーの最後の要素がラベルの場合、ループから出てきます
-
-
temp:=temp * 2
-
odd:=oddがゼロ以外の場合はfalse、それ以外の場合はtrue
-
-
index:=ツリーの長さ– 1
-
インデックスが0ではない場合
-
tree[index]をres配列に挿入
-
インデックス:=インデックス/ 2
-
-
res:=resの逆リスト
-
解像度を返す
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def pathInZigZagTree(self, label): tree = [] res = [] tree.append(0) tree.append(1) odd = 1 current = 1 two = 2 if label == 1: return [1] while True: if odd: max_val = current + two temp = max_val while temp>current: tree.append(temp) if temp == label: break temp-=1 if tree[-1]== label: break current = max_val else: temp = two while temp: temp-=1 current+=1 tree.append(current) if current == label: break if tree[-1]== label: break two*=2 odd = not odd index = len(tree)-1 while index: res.append(tree[index]) index//=2 res=res[::-1] return res ob = Solution() print(ob.pathInZigZagTree(14))
入力
14
出力
[1,3,4,14]
-
Pythonで二分木を反転する
二分木があるとします。私たちの仕事は、逆二分木を作成することです。したがって、ツリーが以下のようになっている場合- 反転したツリーは次のようになります これを解決するために、再帰的アプローチを使用します ルートがnullの場合は、戻ります 左右のポインタを入れ替える 左のサブツリーと右のサブツリーを再帰的に解決します 例(Python) 理解を深めるために、次の実装を見てみましょう- class TreeNode: def __init__(self, data, left = None, right = None):
-
Pythonでの二分木の最大深度
二分木が1つあるとします。その木の最大の深さを見つけなければなりません。ツリーの最大深度は、最長のパスを使用してルートからリーフに到達するためにトラバースされるノードの最大数です。ツリーが次のようになっているとします。ここでは深さが3になります。 これを解決するために、次の手順に従います。 ここでは、再帰的アプローチを使用します。メソッドはsolve(root、depth =0)です。 ルートが空の場合は、深さを返します それ以外の場合は、solve(left、depth + 1)とsolve(left、depth + 1)の最大値を返します 理解を深めるために、次の実装を見てみ