classSolution:defsortedArrayToBST(self, nums: List[int])-> Optional[TreeNode]:ifnot nums:returnNone
m =len(nums)//2
left = self.sortedArrayToBST(nums[:m])
right = self.sortedArrayToBST(nums[m+1:])return TreeNode(nums[m], left, right)
二、98. 验证二叉搜索树
代码:
classSolution:defisValidBST(self, root: Optional[TreeNode], left=-inf, right=inf)->bool:if root isNone:returnTrue
x = root.val
return left < x < right and self.isValidBST(root.left, left, x)and self.isValidBST(root.right, x, right)
三、236. 二叉树的最近公共祖先
思路:有一个前提要知道,公共祖先一定是存在的。最不济也会是root。
代码:
classSolution:deflowestCommonAncestor(self, root:'TreeNode', p:'TreeNode', q:'TreeNode')->'TreeNode':ifnot root or root == p or root == q:return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)ifnot left:return right
ifnot right:return left
return root # 如果 left和right都有返回,返回这个root(公共节点)
四、235. 二叉搜索树的最近公共祖先
代码:
classSolution:deflowestCommonAncestor(self, root:'TreeNode', p:'TreeNode', q:'TreeNode')->'TreeNode':
x = root.val
if p.val<x and q.val<x:return self.lowestCommonAncestor(root.left, p, q)if p.val>x and q.val>x:return self.lowestCommonAncestor(root.right, p, q)return root