From ae37ad0f8feaad7a81cb22ab4937aaca538e30dd Mon Sep 17 00:00:00 2001 From: Hiro Funatsuka Date: Sun, 26 Apr 2026 22:56:44 +0900 Subject: [PATCH] Solve convert sorted array to binary tree --- README.md | 2 +- step1.md | 29 +++++++++++++++++++++++++++-- step2.md | 17 +++++++++++++++++ step3.md | 24 +++++++++++++++++++++--- 4 files changed, 66 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0ee68b0..d245ac4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LeetCode -## 問題: [Link Text](URL) +## 問題: [108. Convert Sorted Array to Binary Tree](https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/) ## 前提 diff --git a/step1.md b/step1.md index 54ebbc1..7599776 100644 --- a/step1.md +++ b/step1.md @@ -1,7 +1,32 @@ # Step 1 +1. numsが空ならNoneを返す +2. rootはnumsの真ん中のindexの値 +3. rootのleftは2のindexまでのnumsで再度2を繰り返す +4. rootのrightは2のindexより先のnumsで再度2を繰り返す + +- 配列のスライスの仕方を正確に覚えていない + ```python +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]: + if not nums: + return None + middle_index = (len(nums) - 1) // 2 + root = TreeNode(nums[middle_index]) + root.left = self.sortedArrayToBST(nums[:middle_index]) + root.right = self.sortedArrayToBST(nums[middle_index + 1:]) + return root ``` -時間計算量: -空間計算量: +時間計算量: O(nlogn) + +空間計算量: O(n) + +- スライス使っているのが非効率そう diff --git a/step2.md b/step2.md index 6ec3360..ecbde55 100644 --- a/step2.md +++ b/step2.md @@ -1,4 +1,21 @@ # Step 2 ```python +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]: + def helper(l, r): + if l > r: + return None + middle_index = (l + r) // 2 + root = TreeNode(nums[middle_index]) + root.left = helper(l, middle_index - 1) + root.right = helper(middle_index + 1, r) + return root + return helper(0, len(nums) - 1) ``` diff --git a/step3.md b/step3.md index 522daa6..ec4591a 100644 --- a/step3.md +++ b/step3.md @@ -1,9 +1,27 @@ # Step 3 ```python +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]: + def helper(l, r): + if l > r: + return None + middle_index = (l + r) // 2 + root = TreeNode(nums[middle_index]) + root.left = helper(l, middle_index - 1) + root.right = helper(middle_index + 1, r) + return root + return helper(0, len(nums) - 1) ``` -1回目: 分 秒 -2回目: 分 秒 +1回目: 1分 54秒 -3回目: 分 秒 +2回目: 1分 55秒 + +3回目: 1分 43秒