1. :二叉搜索树的最近公共祖先
题目链接: 235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)
应用条件:递归,二叉搜索树
难点:
这道题可以直接用二叉树最近公共祖先实现,但也可以利用二叉搜索数自己的特性,去从上往下遍历,找到的第一个在p,q节点值中间的节点,即为p,q的最近公共祖先
个人错误:
思路:
思路一,当成普通二叉树从下往上遍历
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root or root == p or root == q:
return root
left = self.lowestCommonAncestor(root.left,p,q)
right = self.lowestCommonAncestor(root.right,p,q)
if left == None and right == None:
return None
elif left != None and right == None:
return left
elif right != None and left == None:
return right
else:
return root
思路二,二叉搜索数从上往下:
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if root is None:
return root
if root.val > p.val and root.val > q.val:
left = self.lowestCommonAncestor(root.left,p,q)
if left != None:
return left
if root.val < p.val and root.val < q.val:
right = self.lowestCommonAncestor(root.right,p,q)
if right != None:
return right
return root
2. :二叉搜索树中的插入操作
题目链接: 701. 二叉搜索树中的插入操作 - 力扣(LeetCode)
应用条件:递归
难点:
递归二叉搜索数,遇到空节点且数值合适的位置放进去。
个人错误:
思路:
# 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 = right
class Solution:
def insertIntoBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
if root == None:
return TreeNode(val)
self.trav(root,val)
return root
def trav(self,root,val):
if root.val < val and root.right == None:
root.right = TreeNode(val)
elif root.val < val and root.right != None:
self.trav(root.right,val)
elif root.val > val and root.left == None:
root.left = TreeNode(val)
elif root.val > val and root.left != None:
self.trav(root.left,val)