day 22:二叉树补卡
Binary search Tree!
left is less than root less than right
Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
the same algorithm using postorder!
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if root == None or root == p or root == q:
return root
left = self.lowestCommonAncestor(root.left,p,q)
right = self.lowestCommonAncestor(root.right,p,q)
if right and left:
return root
if left:
return left
return right
Leetcode 701. Insert into a Binary Search Tree
逻辑很简单, return 一个新node到root.left or right
class Solution:
def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
def inorder(root):
if not root:
return TreeNode(val)
if val>root.val:
root.right = inorder(root.right)
if val<root.val:
root.left = inorder(root.left)
return root
return inorder(root)
Leetcode 450. Delete Node in a BST
根本不会!!! 分析之后:基本逻辑还是中左右遍历, 中的时候进行一系列条件判断
class Solution:
def deleteNode(self, root: TreeNode, key: int) -> TreeNode:
if not root:
return None
if root.val == key:
if not root.right:
return root.left
if not root.left:
return root.right
temp_val = root.right
while temp_val.left:
temp_val = temp_val.left
root.val = temp_val.val
root.right = self.deleteNode(root.right, root.val)
elif root.val > key:
root.left = self.deleteNode(root.left, key)
else:
root.right = self.deleteNode(root.right, key)
return root