首页 > 其他分享 >二叉树的直径(LeetCode)

二叉树的直径(LeetCode)

时间:2024-09-01 23:50:21浏览次数:12  
标签:diameter right TreeNode depth 二叉树 直径 root LeetCode left

题目

给你一棵二叉树的根节点,返回该树的 直径 。

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。

两节点之间路径的 长度 由它们之间边数表示。

解题

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def diameterOfBinaryTree(root):
    diameter = 0

    def depth(node):
        nonlocal diameter
        if not node:
            return 0

        left_depth = depth(node.left)
        right_depth = depth(node.right)

        # 更新直径
        diameter = max(diameter, left_depth + right_depth)

        # 返回节点的最大深度
        return max(left_depth, right_depth) + 1

    depth(root)
    return diameter


# 示例用法
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

# 调用函数,输出结果
print(diameterOfBinaryTree(root))  # 输出3

 

标签:diameter,right,TreeNode,depth,二叉树,直径,root,LeetCode,left
From: https://blog.csdn.net/weixin_74254879/article/details/141792428

相关文章

  • 【JavaScript】LeetCode:6-10
    文章目录6轮转数组7买卖股票的最佳时机Ⅰ8买卖股票的最佳时机Ⅱ9两数之和10字母异位词分组6轮转数组数组题目要求最终结果返回nums。方法1:拼接数组,n=nums.concat(nums);。方法2:数组直接截取,这里提供方法2的代码。/***@param{number[]}nums*@param......
  • 416. 分割等和子集(leetcode)
    https://leetcode.cn/problems/partition-equal-subset-sum/description/01背包问题,需要考虑到如何把这个问题转化成01背包问题转换成01背包问题后,如何定义f[i]状态来表示这里有两种方式:1.按照传统01背包表示,即前i个物品中选,体积小于等于j的最大价值,这里体积和价值是等价......
  • Leetcode3234. 统计 1 显著的字符串的数量
    EverydayaLeetcode题目来源:3234.统计1显著的字符串的数量解法1:枚举左端点注意到,如果子串中的0非常多,多到0的个数的平方比1的个数都要大,那么这样的子串必然不是1显著子串。设cnt0为子串中的0的个数,cnt1为子串中的1的个数,那么必须满足:cnt0*cnt0<=......
  • 代码随想录刷题day13丨二叉树理论基础,递归遍历,迭代遍历,统一迭代,层序遍历
    代码随想录刷题day13丨二叉树理论基础,递归遍历,迭代遍历,统一迭代,层序遍历1.二叉树理论基础1.1二叉树种类满二叉树概述:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节......
  • 【Leetcode_Hot100】哈希
    哈希1.两数之和49.字母异位词分组128.最长连续序列1.两数之和方法一:HashMap在元素放入数组之前就进行判断,保证了不会取出同一个元素的情况,,例如[3,3],如果先将数组中的所有元素放入hashMap,再判断是否存在,则返回结果为[1,1],不符合题意。classSolution{publicint[......
  • 数据结构:(LeetCode572)另一棵子树
    给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。示例1:......
  • 【数据结构】二叉树基础(带你了解二叉树)
     ......
  • LeetCode - 6 Z 字形变换
    题目来源6.Z字形变换-力扣(LeetCode) 题目描述将一个给定字符串s根据给定的行数numRows,以从上往下、从左到右进行Z字形排列。比如输入字符串为"PAYPALISHIRING"行数为3时,排列如下:P A H NAPLSIIGY I R之后,你的输出需要从左往右逐......
  • Python 数据结构——二叉树(最最最最最实用的二叉树教程)
    本文章以实用为主,所以不多废话直接开整本文所介绍的二叉树是最基础的二叉树,不是二叉搜索树,也不是平衡二叉树,就基本的二叉树二叉树的创建基本二叉树的创建其实比链表还要简单,只需创建一个节点的类即可,随后用指针将其串起来。不同于链表的是,二叉树为一个父节点连接到两个子节......
  • 对称二叉树-101
    题目描述给你一个二叉树的根节点root,检查它是否轴对称。解题思路这里我们相当于是比较根节点左右两颗子树,我们依次向左右子树的左右两个方向进行遍历,我们比较左子树的左孩子和右子树的右孩子,左子树的右孩子和右子树的左孩子,这里如果不好理解可以看下面这个图片,如果两个子节......