The elegant solution is using recursion. If p and q are in left and right, this is the node; or it will be in the subtree that has p and q.
Solution:
# T:O(h) S:O(h) class Solution(object): def lowestCommonAncestor(self, root, p, q): """ :type root: TreeNode :type p: TreeNode :type q: TreeNode :rtype: TreeNode """ if root in (None, p, q): return root left, right = [self.lowestCommonAncestor(child, p, q) \ for child in (root.left, root.right)] # 1. If the current subtree contains both p and q, # return their LCA. # 2. If only one of them is in that subtree, # return that one of them. # 3. If neither of them is in that subtree, # return the node of that subtree. return root if left and right else left or rightRun Time: 156 ms
No comments:
Post a Comment