108 convert sorted array to binary search tree#24
Conversation
| root_node.right = self.sortedArrayToBST(nums[mid+1:]) | ||
|
|
||
| return root_node | ||
|
|
There was a problem hiding this comment.
良いと思いました。
再帰用の関数内関数を作って、
配列ではなく、BSTを構築する範囲を与えるやり方もあると思います。
There was a problem hiding this comment.
確かにインナー関数を使うとスライスを使わずに済むので計算量も少なくて良さそうです。
| node_ranges.append((node.right, mid + 1, right_mid, right)) | ||
|
|
||
| return root | ||
| ``` |
There was a problem hiding this comment.
node_rangesは(node, left, right)として実現する方が再帰の書き換えにもなっていますし、処理もシンプルになるように思います。
| mid = len(nums) // 2 | ||
| root = TreeNode(nums[mid]) | ||
|
|
||
| node_ranges = [(root, 0, mid, len(nums) - 1)] |
There was a problem hiding this comment.
node_rangesの情報量がやや多いように思います。midはいらないかもしれません。範囲のインデックスを格納する以外にはnumsをスライスして格納する方法もあります。
There was a problem hiding this comment.
再帰呼び出すの関数の引数部分がスタックに積まれるので、mid は pop した後に作ればいいですね。
| node_queue.append((node.left, left, left_mid, mid - 1)) | ||
|
|
||
| if mid + 1 <= right: | ||
| right_mid = (mid + 1 + right) // 2 |
| mid = len(nums) // 2 | ||
|
|
||
| root_node = TreeNode(nums[mid]) | ||
| root_node.left = self.sortedArrayToBST(nums[:mid]) |
There was a problem hiding this comment.
スライスはコピーにO(k)かかります。
https://wiki.python.org/moin/TimeComplexity
| @@ -0,0 +1,124 @@ | |||
| 1st | |||
| 時間計算量:O(n) | |||
There was a problem hiding this comment.
これ、スライスがコピーしているので log n がつきそうです。(各階層ごとに全体がコピーされていてそれが log n の深さ行われます。)
| mid = len(nums) // 2 | ||
| root = TreeNode(nums[mid]) | ||
|
|
||
| node_ranges = [(root, 0, mid, len(nums) - 1)] |
There was a problem hiding this comment.
再帰呼び出すの関数の引数部分がスタックに積まれるので、mid は pop した後に作ればいいですね。
| mid = len(nums) // 2 | ||
| root = TreeNode(nums[mid]) |
| ```python | ||
| class Solution: | ||
| def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]: | ||
| def _sortedArrayToBST(left:int, right:int)-> Optional[TreeNode]: |
There was a problem hiding this comment.
inner function の関数名の先頭には _ は付けないほうが多いと思います。 _ を付けるのは、クラスメソッドやモジュールメソッドのうち、他から呼ばれたくないもに対してだと思います。
https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/