107.ツリーの階層遍歴(Python)

2065 ワード

タイトル
難易度:★☆☆☆タイプ:ツリー
ツリーを指定し、ノード値の下から上への階層遍歴を返します.(すなわち、リーフノードのある層からルートノードのある層まで、層ごとに左から右へ遍歴する)

与えられた二叉木[3,9,20,null,null,15,7]は、
    3
   / \
  9  20
    /  \
   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を返す.
  • 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                                                #       
    

    質問やアドバイスがあれば、コメントエリアへようこそ~