107.ツリーの階層遍歴(Python)
2065 ワード
タイトル
難易度:★☆☆☆タイプ:ツリー
ツリーを指定し、ノード値の下から上への階層遍歴を返します.(すなわち、リーフノードのある層からルートノードのある層まで、層ごとに左から右へ遍歴する)
例
与えられた二叉木[3,9,20,null,null,15,7]は、
下から上への階層の遍歴を返します.
[ [15,7], [9,20], [3] ]
に答える
ここでは最も簡単な配列を用いて実現する.観察により,結果リストの各要素はリストであり,ツリーの階層逆順に配列されていることが分かった.結果リストresを定義して,リストcur_を用いて最終遍歴結果を格納する.Layerは、各レイヤの遍歴結果を格納します.ここでは2つのキューqueueとnextを使用します.Queueは、現在のレイヤのすべてのノードと次のレイヤのすべてのノードをそれぞれ表します.具体的な流れは以下の通りです.初期化結果リストresと現在のレイヤノードリストqueue; 現在のレイヤノードリストが空でない限り、ループが行われ、各ループは以下の操作を行う:(1)現在のレイヤ結果リストcur_を初期化するlayerと次のレイヤのノードリストnext_queue; (2)現在のレイヤから順次ノード要素を取り出し、そのノードが空でない場合、現在のレイヤ結果リストcu_に現在のノードの値を加えるlayerで、そのノードの左右の子供のノードを次のレイヤのノードリストnext_に配置します.を選択します.(3)本層で得られた結果リストcur_Layerは最終結果リストresに追加され、queueが次のノードリストnext_に更新される.queue. は、最終結果resを返す.
質問やアドバイスがあれば、コメントエリアへようこそ~
難易度:★☆☆☆タイプ:ツリー
ツリーを指定し、ノード値の下から上への階層遍歴を返します.(すなわち、リーフノードのある層からルートノードのある層まで、層ごとに左から右へ遍歴する)
例
与えられた二叉木[3,9,20,null,null,15,7]は、
3
/ \
9 20
/ \
15 7
下から上への階層の遍歴を返します.
[ [15,7], [9,20], [3] ]
に答える
ここでは最も簡単な配列を用いて実現する.観察により,結果リストの各要素はリストであり,ツリーの階層逆順に配列されていることが分かった.結果リストresを定義して,リストcur_を用いて最終遍歴結果を格納する.Layerは、各レイヤの遍歴結果を格納します.ここでは2つのキューqueueとnextを使用します.Queueは、現在のレイヤのすべてのノードと次のレイヤのすべてのノードをそれぞれ表します.具体的な流れは以下の通りです.
class Solution:
def levelOrderBottom(self, root):
queue = [] #
cur = [root] # ,
while cur: #
cur_layer_val = [] # , val
next_layer_node = [] #
for node in cur: #
if node: # ,
cur_layer_val.append(node.val) #
next_layer_node.extend([node.left, node.right]) #
if cur_layer_val: #
queue.insert(0, cur_layer_val) #
cur = next_layer_node # ,
return queue #
質問やアドバイスがあれば、コメントエリアへようこそ~