题目在这:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/
思路分析:
给一个数组。转成二叉树。该二叉树有两个约束条件~
1. :每个节点的左右两个子树的高度差的绝对值不超过 1 。
2 : 左子树的值 <= 根节点的值 <= 右子树的值
而题目所给的数组是递增数组。
所以我们可以每次找到中点mid作为根节点。
左边的区间给左子树。
右边的区间给右子树。
完整代码:
def dfs(left,right):
if left>right:
return None
# 先找中点
mid = (left + right) // 2
# 用新找到的mid构造新的树根
root = TreeNode(nums[mid])
# 左边给左子树,右边给右子树 (递归建立)
root.left = dfs(left,mid -1)
root.right = dfs(mid +1,right)
return root
return dfs(0,len(nums)-1)