こんにちは
今回の学びは
・recursiveでlevelをわたすことで従来のDFSでlevel orderを解くこともできる
問題はhttps://leetcode.com/problems/n-ary-tree-level-order-traversal/
前回の【アルゴリズム脳トレ】leetcode easy 589 N-ary tree preorder traversalがpreorderでしたが、inorderです。
かつ、アウトプットのフォーマットが違います!配列of 配列です。
関連記事は二分木のpre-order, in-order, post-orderの簡単でわかりやすい説明 です。
(時間配分は5分問題理解 10分検討 10分実装 20分振り返り の一文45分構成)
まずは入出力をしっかりおさえましょう。
とくにエッジケースと、テストは必ずしましょう。
実装前後でこれは毎回書きましょう。timespace analysis (時間とスペースの分析)は
前回の【アルゴリズム脳トレ】leetcode easy 589 N-ary tree preorder traversalにつづき
post-orderの問題です。
実際の実装はこちら
class Solution: def levelOrder(self, root: 'Node') -> List[List[int]]: """ if root is None: return [[]] stack = [root] ans = [root.val] while len(stack) > 0: # do making each layer as an array node = stack.pop() layer = [child.val for child in node.children] ans.append(layer) return ans """ if root is None: return [] stack = [root] ans = [] # [1, ] while len(stack) > 0: layer_ans = [] layer_stack = [] for node in stack: # do making each layer as an array layer_ans.append(node.val) if node.children is None: continue for child in node.children: layer_stack.append( child ) ans.append(layer_ans) stack = layer_stack return ans
「次のこの問題を解くばあい知っていればよい一つの事実とは?」
なし
別の回答で
・recursiveでlevelをわたすことで従来のDFSでlevel orderを解くこともできる
https://leetcode.com/problems/n-ary-tree-level-order-traversal/discuss/341223/Python-DFS-solution
とうことを学びました。
iterativeしか頭になかったんですが、やっぱり皆様すごいですね。
まとめ
・recursiveでlevelをわたすことで従来のDFSでlevel orderを解くこともできる
以上です