Skip to content

543. Diameter of Binary Tree

题目

Given the root of a binary tree, return the length of the diameter of the tree.

The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.

The length of a path between two nodes is represented by the number of edges between them.

 

Example 1:

Input: root = [1,2,3,4,5]
Output: 3
Explanation: 3 is the length of the path [4,2,1,3] or [5,2,1,3].

Example 2:

Input: root = [1,2]
Output: 1

 

Constraints:

  • The number of nodes in the tree is in the range [1, 104].
  • -100 <= Node.val <= 100
Related Topics
  • 深度优先搜索
  • 二叉树

  • 👍 1758
  • 👎 0
  • 思路

    记录最大直径,需要使用一个全局变量来 track 每次找到的最大值

    否则记录的是最后找到的一条直径长度

    解法

    py
    # leetcode submit region begin(Prohibit modification and deletion)
    # 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:
            if not root:
                return 0
    
            self.res = 0
    
            def dfs(root: Optional[TreeNode]) -> int:
                if not root:
                    return 0
    
                left = dfs(root.left)
    
                right = dfs(root.right)
    
                self.res = max(left + right, self.res)
    
                return max(right, left) + 1
            dfs(root)
            return self.res
            
    # leetcode submit region end(Prohibit modification and deletion)

    复杂度分析

    • 时间复杂度 O(N)
    • 空间复杂度 O(H)