# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = NoneclassSolution:deflowestCommonAncestor(self, root:'TreeNode', p:'TreeNode', q:'TreeNode')->'TreeNode':# 首先是左子树返回p,右子树返回q。# 然后是自底向上就不会出现p和q同时出现在某一边子树。deftraversal(node):if node ==Noneor node.val == p.val or node.val == q.val:return node
left = traversal(node.left)
right = traversal(node.right)if left ==None:return right
if right ==None:return left
return node
return traversal(root)
701. 二叉搜索树中的插入操作:
代码思路
# 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 = rightclassSolution:definsertIntoBST(self, root: Optional[TreeNode], val:int)-> Optional[TreeNode]:# 好像是自顶向下# 判断这个节点属于左子树还是右子树?if root ==None:return TreeNode(val)definsert(node):if node ==None:returnif val > node.val:
insert(node.right)ifnot node.right:
node.right = TreeNode(val)else:
insert(node.left)ifnot node.left:
node.left = TreeNode(val)
insert(root)return root
450. 删除二叉搜索树中的节点
代码思路
# 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 = rightclassSolution:defdeleteNode(self, root: Optional[TreeNode], key:int)-> Optional[TreeNode]:if root isNone:returnNoneif root.val > key:
root.left = self.deleteNode(root.left, key)elif root.val < key:
root.right = self.deleteNode(root.right, key)elif root.left isNoneor root.right isNone:
root = root.left if root.left else root.right
else:
successor = root.right
while successor.left:
successor = successor.left
successor.right = self.deleteNode(root.right, successor.val)
successor.left = root.left
return successor
return root