代码编织梦想

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

示例 :

给定二叉树

1

/ \

2 3

/ \

4 5

返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

注意:两结点之间的路径长度是以它们之间边的数目表示。

https://leetcode.cn/problems/diameter-of-binary-tree/description/

思路

所谓的二叉树的直径,实际上是某个节点左子树与右子树的最大深度之和。我们可以定义一个函数,maxDepth 返回某节点到叶子节点的最大深度,遍历所有节点,并统计每个节点左子树与右子树最大深度之和,找出其中最大值

c++:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int max_val = 0;
    int diameterOfBinaryTree(TreeNode* root) {
        tranverse(root);

        return max_val;
    }

    void tranverse(TreeNode* root) {
        if(root == nullptr) {
            return;
        }
        int leftMaxDepth = maxDepth(root->left);
        int rightMaxDepth = maxDepth(root->right);

        if(max_val < leftMaxDepth + rightMaxDepth) {
            max_val = leftMaxDepth + rightMaxDepth;
        }

        tranverse(root->left);
        tranverse(root->right);

    }

    int maxDepth(TreeNode* root) {
        if(root == nullptr) {
            return 0;
        }

        int leftMaxDepth = maxDepth(root->left);        
        int rightMaxDepth = maxDepth(root->right);

        if(leftMaxDepth > rightMaxDepth) {
            return leftMaxDepth + 1;
        } else {
            return rightMaxDepth + 1;
        }
    }

};
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33775774/article/details/128820997

leetcode刷题(543. 二叉树的直径)_不周山的葫芦的博客-爱代码爱编程

Leetcode刷题(543. 二叉树的直径) 一.题目二.代码(C)三.提交记录四.备注 一.题目 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能

leetcode-python-543. 二叉树的直径-爱代码爱编程

  给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例 : 给定二叉树           1          / \         2   3        / \            4   5     返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,

LeetCode刷题笔记 543. 二叉树的直径-爱代码爱编程

543. 二叉树的直径 class Solution { public: int ans=1; / 不可预设为0,为空时返回的是ans-1 int depth(TreeNode* root){ if(!root) return 0; int L=depth(root->left);

leetcode刷题7——543.二叉树的直径(深度优先搜索)-爱代码爱编程

题目 解答 class Solution { int ans; int depth(TreeNode* rt){ if (rt == NULL) return 0; // 访问到空节点了,返回0 int L = depth(rt->left); // 左儿子为根的子树的深度

leetcode刷题(27)——543.二叉树的直径-爱代码爱编程

一、题目 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 注意:两结点之间的路径长度是以它们之间边的数目表示。 二、思路 与二叉树的深度相结合。 两个节点之间的路径长度是它们之间边的数目,所以,一条路径的长度就等于该路径经过的节点数减一。而一条路径可以看成是以某

leetcode刷题---树问题总结-爱代码爱编程

一、二叉树的前序、后序、中序,层次遍历的递归和循环实现 class TreeNode(object): """定义节点类""" def __init__(self, x, left=None, right=None): self.val = x self.left = None self.r

Leetcode刷题记录——543. 二叉树的直径-爱代码爱编程

注意 直径未必需要经过root 因此要遍历每一个节点 以它作为输入 以一个点为输入root的最长直径,即1 + 左子树最大边数 + 1 +右子树最大边数 计算完一个节点下有多少条边以后,计入字典 最后返回的结果是一个全局最长直径 # Definition for a binary tree node. # class TreeNode: #

【刷题1】LeetCode 543. 二叉树的直径 java题解-爱代码爱编程

题目 543. 二叉树的直径 代码 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val

老卫带你学---leetcode刷题(543. 二叉树的直径)-爱代码爱编程

543. 二叉树的直径 问题: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 思想: 深度优先搜索 首先我们知道一条路径的长度为该路径经过的节点数减一,所以求

Leetcode刷题之——543. 二叉树的直径-爱代码爱编程

题目: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。 其实这道题和这道题有点类似 且听我慢慢道来: 算法分

LeetCode刷题笔记:543.二叉树的直径-爱代码爱编程

1. 问题描述 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 2. 解题思路 ⭐本题关键在于所求路径可能不穿过根节点 比方说下面这棵二叉树,最大路径不经过根节点 1: 1 / 2 / \ 3 4 / \ 5

LeetCode Java刷题笔记—543. 二叉树的直径-爱代码爱编程

543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。两结点之间的路径长度是以它们之间边的数目表示。 简单难度。这道题和124. 二叉树中的最大路径和(困难)思路是一样的,但却是简单难度。主要注意的是这条路径可能穿过也可能不穿过根结点,我们维护

leetcode刷题——543. 二叉树的直径、617. 合并二叉树(递归解决)_lonelymangoo的博客-爱代码爱编程

递归 解决这两道题我想先理一理递归的思路,解决递归问题要有三个要素: 方法参数和返回值 方法参数:方法参数有两种情况 如果和前面有关系,那就得设置为全局变量 例如刷题中的538题,就会出问题,导致传过来的值不是最

leetcode刷题543. 二叉树的直径_bonbon_wen的博客-爱代码爱编程

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树           1          / \         2   3        / \            4   5     返回 3, 它的长度是路径 [4,2,1,3] 或者 

leetcode刷题记录--- 微软企业题库-爱代码爱编程

微软企业题库,持续更新~~~加油! 😄 今天是2022年12月30号,我开始了LeetCode的《微软企业题库》专题 刷题! 🚀 开了力扣plus会员了,可以看到各企业的出题情况和题目的出现频率,所以打算把各企业的出

leetcode java刷题笔记— 543. 二叉树的直径_给定一个二叉树时计算它的直径长度-爱代码爱编程

543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。两结点之间的路径长度是以它们之间边的数目表示。 简单难度

leetcode刷题复盘笔记—543. 二叉树的直径_一棵二叉树的直径长度是任意两个结点路径长度中的最大值-爱代码爱编程

今日主要总结一下,543. 二叉树的直径 题目:543. 二叉树的直径 Leetcode题目地址 题目描述: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿