【leetcode100】二叉树的直径
1、题目描述
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root
。
两节点之间路径的 长度 由它们之间边数表示。
示例 1:
输入:root = [1,2,3,4,5] 输出:3 解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
2、初始思路
2.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 = right
class Solution:
def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int:
self.max_len = 0 # 用于记录最大直径
def length(node):
if node is None:
return 0
left_len = length(node.left) # 左子树的深度
right_len = length(node.right) # 右子树的深度
self.max_len = max(self.max_len, left_len + right_len) # 更新最大直径
return max(left_len, right_len) + 1 # 返回当前节点的深度
length(root)
return self.max_len