一、108. 将有序数组转换为二叉搜索树

class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:if not nums:return Nonem = len(nums)//2left = self.sortedArrayToBST(nums[:m])right = self.sortedArrayToBST(nums[m+1:])return TreeNode(nums[m], left, right)
二、98. 验证二叉搜索树

class Solution:def isValidBST(self, root: Optional[TreeNode], left=-inf, right=inf) -> bool:if root is None:return Truex = root.valreturn left < x < right and self.isValidBST(root.left, left, x) and self.isValidBST(root.right, x, right)
三、236. 二叉树的最近公共祖先

- 思路:有一个前提要知道,公共祖先一定是存在的。最不济也会是root。
- 代码:
class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':if not root or root == p or root == q:return rootleft = self.lowestCommonAncestor(root.left, p, q)right = self.lowestCommonAncestor(root.right, p, q)if not left:return rightif not right:return leftreturn root
四、235. 二叉搜索树的最近公共祖先

class Solution:def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':x = root.valif 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