LeetCode543题:二叉树的直径(python3)

代码思路:

先递归调用左儿子和右儿子求得它们为根的子树的深度 L和 R ,则该节点为根的子树的深度即为max(L,R)+1。该节点的 dnode值为L+R+1

递归搜索每个节点并设一个全局变量 ans记录 dnode的最大值,最后返回 ans-1 即为树的直径。

python 复制代码
# 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.ans = 1
        def depth(node):
            # 访问到空节点了,返回0
            if not node: 
                return 0 
            # 左儿子为根的子树的深度
            L = depth(node.left) 
            # 右儿子为根的子树的深度
            R = depth(node.right)
            # 计算d_node即L+R+1 并更新ans
            self.ans = max(self.ans,L+R+1)
            # 返回该节点为根的子树的深度
            return max(L,R)+1 
        depth(root)
        return self.ans-1
相关推荐
生信研究猿21 分钟前
leetcode 101.对称二叉树(不会做)
算法·leetcode·职场和发展
2401_8274999922 分钟前
python核心语法04-函数
开发语言·python
重生之我是Java开发战士22 分钟前
【笔试强训】Week1:点击消除,数组中两个字符串的最小距离,dd爱框框,腐烂的苹果,大数乘法
java·开发语言·算法
枫叶林FYL22 分钟前
【自然语言处理 NLP】前沿架构与多模态 选择性状态空间模型与并行扫描算法:从原理到实现
算法·自然语言处理·架构
牧瀬クリスだ29 分钟前
优先级队列——堆
java·开发语言·数据结构
WolfGang00732132 分钟前
代码随想录算法训练营 Day29 | 动态规划 part02
算法·动态规划
样例过了就是过了33 分钟前
LeetCode热题100 跳跃游戏 II
c++·算法·leetcode·贪心算法·动态规划
rit843249934 分钟前
基于NSGA-II的多目标优化算法(MATLAB实现)
开发语言·算法·matlab
香蕉鼠片34 分钟前
第三大的数
数据结构·算法·leetcode
汀、人工智能35 分钟前
[特殊字符] 第28课:相交链表
数据结构·算法·链表·数据库架构··相交链表