Conversation
| queue.PushBack(root.Left) | ||
| queue.PushBack(root.Right) |
There was a problem hiding this comment.
私は、この2つずつ入っている、という方法はあまり好みません。
本当に2つずつ入っているのか、コード全体を見ないと分かりません。
コンパイル時の型チェックが効きません。
少々面倒でも struct 作ったほうがいいんじゃないでしょうか。
There was a problem hiding this comment.
同意見です。型レベルでペアであることが保証されているとバグが起きにくそうです。
| */ | ||
|
|
||
| /* | ||
| 初見で解くことができなかったので、他の解法を見て解いた。再帰の練習が足りてなさそう。 |
There was a problem hiding this comment.
再帰は仕事の分担でよく説明していて一定の成果が出ているように見えていますが、混乱している気持ちはあんまり分かっていません。なんか余計なことを考えているようには見えます。
There was a problem hiding this comment.
再帰自体は混乱せずに理解はできていてコードは読めばすぐに理解できたのですが、この問題の解法(どのようにしてsymmetricかを判断するか)自体が思いつかなかった感じです
| if root == nil { | ||
| return true | ||
| } | ||
| return isMirror(root.Left, root.Right) |
There was a problem hiding this comment.
個人的にも nil のときには true が自然だと思います。その場合、以下のようにすると最初の分岐が不要になりそうです。
| if root == nil { | |
| return true | |
| } | |
| return isMirror(root.Left, root.Right) | |
| return isMirror(root, root) |
| if left == nil || right == nil { | ||
| return false | ||
| } | ||
| return left.Val == right.Val && isMirror(left.Left, right.Right) && isMirror(left.Right, right.Left) |
There was a problem hiding this comment.
少し1行が長くなっていて、かつ「現在着目しているノードの話」と「子ノードの話」が含まれた条件になっているので、個人的には分割したほうがスッキリする気がします。
| return left.Val == right.Val && isMirror(left.Left, right.Right) && isMirror(left.Right, right.Left) | |
| if left.Val != right.Val { | |
| return false | |
| } | |
| return isMirror(left.Left, right.Right) && isMirror(left.Right, right.Left) |
| queue.PushBack(root.Left) | ||
| queue.PushBack(root.Right) |
There was a problem hiding this comment.
同意見です。型レベルでペアであることが保証されているとバグが起きにくそうです。
Symmetric Treeを解きました。レビューをお願いします。
問題:https://leetcode.com/problems/symmetric-tree/
言語:Go
Kitaken0107/GrindEasy#18