classSolution:deflowestCommonAncestor(self, root:'TreeNode', p:'TreeNode', q:'TreeNode')->'TreeNode':# 递归ifnot root:returnif root.val == p.val:return p
if root.val == q.val:return q
left =None
right =Noneif root.val > p.val and root.val > q.val:
left = self.lowestCommonAncestor(root.left, p, q)elif root.val < p.val and root.val < q.val:
right = self.lowestCommonAncestor(root.right, p, q)else:
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)if left and right:return root
if left:return left
if right:return right
return
classSolution:deflowestCommonAncestor(self, root:'TreeNode', p:'TreeNode', q:'TreeNode')->'TreeNode':# 迭代法
cur = root
while(cur):if cur.val < p.val and cur.val < q.val:
cur = cur.right
elif cur.val > p.val and cur.val > q.val:
cur = cur.left
else:return cur
701.二叉搜索树中的插入操作
一个简单的定义题?根据大小判断一下,保留前一个的指针,再插入就行
classSolution:definsertIntoBST(self, root: Optional[TreeNode], val:int)-> Optional[TreeNode]:# 二叉搜索树的插入ifnot root:return TreeNode(val)
pre =None
cur = root
while(cur):if val < cur.val:
pre = cur
cur = cur.left
else:
pre = cur
cur = cur.right
print(pre.val)if val < pre.val: pre.left = TreeNode(val)else:pre.right = TreeNode(val)return root