Method 1: 自己想的,先找到deepest leaves,再用lca
    Method 2: 记录depth,左右子树depth一样说明左右都有以当前节点为root的deepest leaves 所以lca就是root, 然后递归调用

    Method 1:

    1. # Definition for a binary tree node.
    2. # class TreeNode:
    3. # def __init__(self, val=0, left=None, right=None):
    4. # self.val = val
    5. # self.left = left
    6. # self.right = right
    7. class Solution:
    8. def lcaDeepestLeaves(self, root: TreeNode) -> TreeNode:
    9. def lca(root: TreeNode, nodes: list):
    10. if root == None or root in nodes:
    11. return root
    12. #if len(nodes) == 1:
    13. left = lca(root.left, nodes)
    14. right = lca(root.right, nodes)
    15. if left != None and right != None:
    16. return root
    17. elif left != None:
    18. return left
    19. elif right != None:
    20. return right
    21. else:
    22. return None
    23. if root == None:
    24. return None
    25. queue = [root]
    26. while queue:
    27. size = len(queue)
    28. level = []
    29. for i in range(size):
    30. node = queue.pop(0)
    31. level.append(node)
    32. if node.left:
    33. queue.append(node.left)
    34. if node.right:
    35. queue.append(node.right)
    36. print(level)
    37. return lca(root, level)

    Method 2:

    1. def lcaDeepestLeaves(self, root):
    2. def helper(root):
    3. if not root: return 0, None
    4. h1, lca1 = helper(root.left)
    5. h2, lca2 = helper(root.right)
    6. if h1 > h2: return h1 + 1, lca1
    7. if h1 < h2: return h2 + 1, lca2
    8. return h1 + 1, root
    9. return helper(root)[1]