# 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 = right
classSolution: defdiameterOfBinaryTree(self, root: Optional[TreeNode]) -> int: ans = 0 defdfs(node): if node isNone: return0 # 递归获取左右子树的高度 l_depth = dfs(node.left) r_depth = dfs(node.right) # 更新全局最大直径:左深度 + 右深度 nonlocal ans ans = max(ans, l_depth + r_depth) # 返回当前节点提供给上层的高度 returnmax(l_depth, r_depth) + 1 dfs(root) return ans
classTreeNode: def__init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right
defbuild_tree(arr): ifnot arr or arr[0] isNone: returnNone root = TreeNode(arr[0]) queue = [root] i = 1 while queue and i < len(arr): node = queue.pop(0) if arr[i] isnotNone: node.left = TreeNode(arr[i]) queue.append(node.left) i += 1 if i < len(arr) and arr[i] isnotNone: node.right = TreeNode(arr[i]) queue.append(node.right) i += 1 return root
deftree_to_list(root): ifnot root: return [] result = [] queue = [root] while queue: node = queue.pop(0) if node: result.append(node.val) queue.append(node.left) queue.append(node.right) else: result.append(None) while result and result[-1] isNone: result.pop() return result
classSolution: defdiameterOfBinaryTree(self, root: Optional[TreeNode]) -> int: ans = 0