235. 二叉搜索树的最近公共祖先
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
if not root:
return None
if root == p or root == q: #这句一定要加上
return root
if q.val<root.val<p.val or p.val<root.val<q.val:
return root
if root.val < p.val and root.val < q.val:
right = self.lowestCommonAncestor(root.right, p, q)
return right
if root.val > p.val and root.val > q.val:
left = self.lowestCommonAncestor(root.left, p, q)
return left
简化后
class Solution:
def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode')
if not root:
return None
if root.val < p.val and root.val < q.val:
right = self.lowestCommonAncestor(root.right, p, q)
return right
if root.val > p.val and root.val > q.val:
left = self.lowestCommonAncestor(root.left, p, q)
return left
return root #即把前三个if合并
701.二叉搜索树中的插入操作
class Solution:
def insertIntoBST(self, root, val):
if root is None:
node = TreeNode(val)
return node
if root.val > val:
root.left = self.insertIntoBST(root.left, val)
if root.val < val:
root.right = self.insertIntoBST(root.right, val)
return root
【思考】通过递归函数的返回值完成父子节点的赋值是可以带来便利的。
注意:以下代码是错误的,return root,并没有返回到跟节点,此if 不能结束,这种写法是错的,必须要在结束条件中加上新的值,并在if里接收它才行。
class Solution(object): def insertIntoBST(self, root, val): if not root: return if val > root.val: self.insertIntoBST(root.right, val) root.right = TreeNode(val) return root if val < root.val: self.insertIntoBST(root.left, val) root.left = TreeNode(val) return root