Conversation
| long min = nodeMinMax.min, max = nodeMinMax.max; | ||
| if (node == null) { | ||
| continue; | ||
| } |
There was a problem hiding this comment.
ちょう細かいですが、if (node == null)はlong min = nodeMinMax.min, max = nodeMinMax.max;の前に書いても良いかなと思いました
There was a problem hiding this comment.
たしかにそうですね。なんでそうしなかったんだろうって思ったので修正してしまいました。
b9106c6
|
良いと思います! |
|
きれいですね!参考になりました。 |
|
|
||
| 次のようなことを考えながら実装していました: | ||
|
|
||
| - Balanced binary tree とは限らないので、再帰関数として実装すると最大で 10^4 要素がスタックに入る可能性があり、スタックオーバーフローの懸念があると判断 |
There was a problem hiding this comment.
問題の制約を考えると選択肢から外れるのかもしれませんが、inorderの再帰版とか書いておくと良いのかもしれません(trivialと感じるなら余計かもですが)
| boolean isValid = min < node.val && node.val < max; | ||
| if (!isValid) { |
There was a problem hiding this comment.
ここでisValidを定義しないで直接でもいい気がしました。
好みの話なんでしょうけど。
There was a problem hiding this comment.
あくまで個人の体験談ですが、クラスのフィールドのうち、コンストラクターが呼び出されたあとに変更しないものについては final にしていました。それ以外は final にしないことが多かったです。チームによって方針が違うのではないでしょうか。
There was a problem hiding this comment.
nodchip さんと同じく、メンバー変数を除いて final 修飾子が付与されているのは稀でした。
しかしこうやってコメントされると、他の言語のそれと比べて何だか不思議な慣習に思えますね。自分も Go を書いているときはいつでも宣言時に変数にするか定数にするか考えるのに、 Java を扱っている時はそうではないなと気づきました。
There was a problem hiding this comment.
Java だとオブジェクト指向のベストプラクティスの導入のため柔軟性が重要で、イミュータビリティを与えるのに慎重になりがちなのがこのような慣習に繋がっているのかな、と思いつきましたがどうなんでしょうね。
あと単純に final + 型名 を書くのが面倒くさいというのもありそうです。元々コードの記述量が多くなりがちな言語ですから、可読性担保のために削れるものは削っておきたいみたいな考えもありそうです。
https://leetcode.com/problems/validate-binary-search-tree/description/