添加链接描述
# 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 __init__(self):self.max = 0def diameterOfBinaryTree(self, root: TreeNode) -> int:self.depth(root)return self.maxdef depth(self, root):if not root:return 0l = self.depth(root.left)r = self.depth(root.right)'''每个结点都要去判断左子树+右子树的高度是否大于self.max,更新最大值'''self.max = max(self.max, l+r)# 返回的是高度return max(l, r) + 1
思路:
- 典型的求树高,然后把左右子树树高相加的题目
但是需要注意一个情况:
- 最大直径可能并不是左右子树相加,也可能是一颗子树中的最大直径
- 所以需要引入一个全局变量,记录每一个节点的最大直径
- 添加
__init__(self)
函数,然后把max值作为全局变量 - 每次比较
self.max = max(self.max, l+r)
这样才能不遗漏最大值