【力扣100】543.二叉树的直径

添加链接描述

# 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 = 0
    
    def diameterOfBinaryTree(self, root: TreeNode) -> int:
        self.depth(root)
        
        return self.max
        
    def depth(self, root):
        if not root:
            return 0
        l = self.depth(root.left)
        r = self.depth(root.right)
        '''每个结点都要去判断左子树+右子树的高度是否大于self.max,更新最大值'''
        self.max = max(self.max, l+r)
        
        # 返回的是高度
        return max(l, r) + 1

思路:

  1. 典型的求树高,然后把左右子树树高相加的题目
    但是需要注意一个情况:
  • 最大直径可能并不是左右子树相加,也可能是一颗子树中的最大直径
    【力扣100】543.二叉树的直径_第1张图片
  1. 所以需要引入一个全局变量,记录每一个节点的最大直径
  2. 添加__init__(self)函数,然后把max值作为全局变量
  3. 每次比较self.max = max(self.max, l+r)这样才能不遗漏最大值

你可能感兴趣的:(leetcode,算法)