首页 > 其他分享 >543. 二叉树的直径

543. 二叉树的直径

时间:2023-12-13 23:46:23浏览次数:36  
标签:int 543 二叉树 ans 直径 root 节点

1.题目介绍

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

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

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

示例 1:

输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。

示例 2:

输入:root = [1,2]
输出:1

提示:

  • 树中节点数目在范围 \([1, 10^{4}]\) 内
  • \(-100 <= Node.val <= 100\)

2.题解

2.1

思路

这题可以说 是二叉树最大深度的拓展,主体思路还是使用递归,从下往上分别求得左右子树的最大深度。
这时候通过当前层该根节点的节点数最大为:左子树最大深度+右子树最大深度+1,而最大直径等于这个值-1.
这里设置一个全局变量ans来存储这个最大直径时,每次计算一个根节点的最大深度同时,也计算出其最大直径并跟ans比较,更新ans值。

代码

class Solution {
public:
    int ans;
    int depth(TreeNode* root){
        if (root == nullptr) return 0;
        int left = depth(root->left);
        int right = depth(root->right);
        ans = max(ans, left + right);
        return max(left,right) + 1;
    }
    int diameterOfBinaryTree(TreeNode* root) {
        ans = 0;
        depth(root);
        return ans;
    }
};

标签:int,543,二叉树,ans,直径,root,节点
From: https://www.cnblogs.com/trmbh12/p/17900205.html

相关文章

  • 101. 对称二叉树
    1.题目介绍给你一个二叉树的根节点\(root\),检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false提示:树中节点数目在范围\([1,1000]\)内\(-100<=Node.val<=100\)进阶:你可以运用递归和迭代两种......
  • 226. 翻转二叉树
    1.题目介绍给你一棵二叉树的根节点\(root\),翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]提示:树中节点数目范围在\([0,100]\)内\(-100<=Node.val......
  • C++堆——heap与二叉树和python
    数据结构栈-->stack队列-->queue树-->tree堆-->heap散列-->hash图-->graph图结构一般包括顶点和边邻接矩阵DAG,DirectedAcyclicGraph即「有向无环图」树树(Tree)是一种非线性的数据结构,由n个节点组成,其中每个节点都有零个或多个子节点。......
  • 线索二叉树记录
                                       中序遍历:   BADCE 将树型结构转换为线性结构,每个结点都有直接前驱和直接后继。              ......
  • 力扣101-对称二叉树
    该题难度为【简单】1.尝试自己写,哪怕写个暴力解法也行,没写出来,看官方题解。2.扫了一眼,不太理解,又想了一会“我代码里漏掉的一半在官方思路中是怎么补上的”,再从头看一遍文字解析,“原来是两棵树对比”。这样思路就清晰了,用递归遍历每个节点,比较每次遍历的“根节点”即可。3.......
  • 257. 二叉树的所有路径
    目录题目题解:前序遍历题目给你一个二叉树的根节点root,按任意顺序,返回所有从根节点到叶子节点的路径。题解:前序遍历classSolution:defbinaryTreePaths(self,root:Optional[TreeNode])->List[str]:res=[]self.getPaths(root,'',re......
  • Leetcode刷题day12-二叉树.前中后序遍历
    递归法实现前.中.后序遍历代码随想录(programmercarl.com)解题思路前序遍历:头->左->右中序遍历:左->头->右后序遍历:左->右->头递归法实现流程:1.定义递归函数;2.寻找递归终止条件;3.设计单层递归模块classSolution(): def__init__(self,val=0,left=None,right=None): sel......
  • 226. 翻转二叉树
    目录题目题解:DFS题目给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。题解:DFSclassSolution:definvertTree(self,root:Optional[TreeNode])->Optional[TreeNode]:#空树,交换左右子树,递归左右子树ifnotroot:return......
  • 8.平衡二叉树
    110.平衡二叉树1、概要给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例1:给定二叉树[3,9,20,null,null,15,7]和二叉树最大深度有很大区别leetcode中强调的深度和高度很......
  • 7.完全二叉树的节点个数
    222.完全二叉树的节点个数1、概要给出一个完全二叉树,求出该树的节点个数。示例1:输入:root=[1,2,3,4,5,6]输出:6首先按照普通二叉树的逻辑来求。这道题目的递归法(后序)和求二叉树的深度(取MAX)写法类似,而迭代法,遍历模板稍稍修改一下,记录遍历的节点数量就可以了2、思路......