力扣日刷47-补
236.二叉树的最近公共祖先这一题的逻辑说句实话也是非常地难懂。下面我来做一个总结吧首先我们的边界条件是如果节点为空或者节点是pq其中一个返回节点的值。然后我们进行后序的遍历。这个遍历相当于是去刨根问底一定要找到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 root is None or root is p or root is q: return root left self.lowestCommonAncestor(root.left,p,q) right self.lowestCommonAncestor(root.right,p,q) if left and right: return root if left: return left return right235.二叉搜索树的最近公共祖先这一道题是这样的跟上一题差不多这一题会更简单一点这一题用到的是更加简易的判断。返回递归条件设置为了当两个值都在一侧的时候进入迭代在哪一侧就进入哪一侧。然后直到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: x root.val if p.val x and q.valx: return self.lowestCommonAncestor(root.left,p,q) if p.val x and q.val x: return self.lowestCommonAncestor(root.right,p,q) return root