Method 1: 自己想的,先找到deepest leaves,再用lca
Method 2: 记录depth,左右子树depth一样说明左右都有以当前节点为root的deepest leaves 所以lca就是root, 然后递归调用
Method 1:
# 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 = rightclass Solution:def lcaDeepestLeaves(self, root: TreeNode) -> TreeNode:def lca(root: TreeNode, nodes: list):if root == None or root in nodes:return root#if len(nodes) == 1:left = lca(root.left, nodes)right = lca(root.right, nodes)if left != None and right != None:return rootelif left != None:return leftelif right != None:return rightelse:return Noneif root == None:return Nonequeue = [root]while queue:size = len(queue)level = []for i in range(size):node = queue.pop(0)level.append(node)if node.left:queue.append(node.left)if node.right:queue.append(node.right)print(level)return lca(root, level)
Method 2:
def lcaDeepestLeaves(self, root):def helper(root):if not root: return 0, Noneh1, lca1 = helper(root.left)h2, lca2 = helper(root.right)if h1 > h2: return h1 + 1, lca1if h1 < h2: return h2 + 1, lca2return h1 + 1, rootreturn helper(root)[1]
