Update 0108.将有序数组转换为二叉搜索树.md

补充python注释
This commit is contained in:
Asterisk
2021-10-10 11:35:48 +08:00
committed by GitHub
parent b5dcc5583d
commit b314a3f3a5

View File

@ -304,22 +304,42 @@ class Solution {
} }
``` ```
## Python ## Python
**递归**
递归法:
```python3 ```python3
# 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: class Solution:
def sortedArrayToBST(self, nums: List[int]) -> TreeNode: def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
def buildaTree(left,right): '''
if left > right: return None #左闭右闭的区间,当区间 left > right的时候就是空节点,当left = right的时候不为空 构造二叉树:重点是选取数组最中间元素为分割点,左侧是递归左区间;右侧是递归右区间
mid = left + (right - left) // 2 #保证数据不会越界 必然是平衡树
val = nums[mid] 左闭右闭区间
root = TreeNode(val) '''
root.left = buildaTree(left,mid - 1) # 返回根节点
root.right = buildaTree(mid + 1,right) root = self.traversal(nums, 0, len(nums)-1)
return root
root = buildaTree(0,len(nums) - 1) #左闭右闭区间
return root return root
def traversal(self, nums: List[int], left: int, right: int) -> TreeNode:
# Base Case
if left > right:
return None
# 确定左右界的中心,防越界
mid = left + (right - left) // 2
# 构建根节点
mid_root = TreeNode(nums[mid])
# 构建以左右界的中心为分割点的左右子树
mid_root.left = self.traversal(nums, left, mid-1)
mid_root.right = self.traversal(nums, mid+1, right)
# 返回由被传入的左右界定义的某子树的根节点
return mid_root
``` ```
## Go ## Go