102. Binary Tree Level Order Traversal#26
Conversation
| nodes_count = len(nodes_queue) | ||
| for _ in range(nodes_count): | ||
| node = nodes_queue.popleft() | ||
| same_level_nodes.append(node.val) |
There was a problem hiding this comment.
たしかに、nodeにnode.valがあるのは読み手にびっくりさせてしまいますね。
| queue_length = len(queue) | ||
| for _ in range(queue_length): | ||
| node = queue.popleft() | ||
| same_level_nodes.append(node.val) |
There was a problem hiding this comment.
ここnodeではなくnode.valなの違和感あります。
same_level_node_valsの方が適切かと。
| nodes = [root] | ||
| while nodes: | ||
| current_level_nodes = [] | ||
| next_level_nodes = [] |
There was a problem hiding this comment.
ここ、nodes_by_level.append([])として、nodes_by_level[-1]にappendしていくこともできます。
| @@ -0,0 +1,95 @@ | |||
| 1st | |||
| queue を用意し、同じレベルの node を queue にいれ、ノードの要素数だけループを回してリストに入れる。 | |||
There was a problem hiding this comment.
ノードの要素数だけループを回してリストに入れるコードは、個人的にはあまり書きません。同じチームの平均的なメンバーから見て違和感がないようであれば、問題ないと思います。
There was a problem hiding this comment.
悪くはないんですが、要するに一つの変数に、2種類のもの(現在のレベルと次のレベル)が入っていて、その境界が先頭から queue_length - _ の場所っていうことですよね。
これって書いている人はともかく、読んでいる人はコード全体読まないと分からなくないですか。
いまは、6行だからまだいいですが、ここが100行とかになると、すべての行が queue_length - _ と queue の内部の状態の関係の制約を守っていることを確認するのは手間です。
https://docs.google.com/document/d/11HV35ADPo9QxJOpJQ24FcZvtvioli770WWdZZDaLOfg/edit?tab=t.0#heading=h.ho7q4rvwsa1g
|
|
||
| 再帰的な方法。 | ||
| 動くコードはかけるが、頭で処理を追う場合BFS的な方がしっくりきますね。 | ||
| node の数が 2000 までなので RecursionError は考慮しなくていい。 |
There was a problem hiding this comment.
正常な入力の場合、RecursionErrorは送出されませんね。
ただ、例えば間違って葉ノードが全て根ノードを指すようになっていたとしたら、再帰で書いておくとRecursionErrorで異常な入力を検知することができますね。
| result = [] | ||
| traverse_by_level(root, 0) | ||
| return result |
There was a problem hiding this comment.
好みをいうと、inner function(今回だとtraverse_by_level())内で、その引数にない、enclosing function(今回だとlevelOrder())の変数をいじるのはあまり好きではないです。
このサイズなら問題ないですが、大きくなった時、何がどこで変化したのか分かりにくいからです。
じぶんなら、resultも引数に入れるか、traverse_by_level()の返り値をresultになるように調整するかなと思います。
| nodes_by_level = [] | ||
| if root is None: | ||
| return nodes_by_level |
There was a problem hiding this comment.
自分なら以下のように書くかなと思います。
if root is None:
return []
nodes_by_level = []
https://leetcode.com/problems/binary-tree-level-order-traversal/description/