leetcode543--二叉树的直径

news/2024/9/23 22:42:06/

1. 题意

求二叉树上最远两个节点之间的距离。

2. 题解

2.1 暴力

最长路径的三种情况

  • 通过根节点
  • 在左子树
  • 在右子树
            12    4     5  6  7   8   9 diameter =  5

通过根节点的最长路径长度一定是左右子树深度之和。

但是这样求左右子树的深度会不断重复,所以复杂度很高。

/*** 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 getDepth(TreeNode *root) {return root == nullptr ? 0 : max(getDepth(root->left), getDepth(root->right)) + 1;}int diameterOfBinaryTree(TreeNode* root) {// 最长路径的三种情况
// * 通过根节点
// * 在左子树
// * 在右子树//          1
//       2    
//     4  5  
//  6 7  8 9
// diameter =  5if ( nullptr == root)return 0;int lmx = diameterOfBinaryTree(root->left);int rmx = diameterOfBinaryTree(root->right);int ans = max(lmx, rmx);int ldepth = getDepth(root->left);int rdepth = getDepth(root->right);return max(ans, ldepth + rdepth); }
};
2.2 动态规划

我们可以在求深度的时候,更新答案,返回经过根节点但不拐弯的链的最长长度。


/*** 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 getDepth(TreeNode *root, int &ans) {if ( nullptr == root)return 0;int ldepth = getDepth(root->left, ans);int rdepth = getDepth(root->right, ans);ans = max( ldepth + rdepth + 1, ans);return max(ldepth, rdepth) + 1;}int diameterOfBinaryTree(TreeNode* root) {int ans = 0;getDepth(root, ans);return ans - 1;}
};

http://www.ppmy.cn/news/1437948.html

相关文章

从虚拟化走向云原生,红帽OpenShift“一手托两家”

汽车行业已经迈入“软件定义汽车”的新时代。吉利汽车很清醒地意识到,只有通过云原生技术和数字化转型,才能巩固其作为中国领先汽车制造商的地位。 和很多传统企业一样,吉利汽车在走向云原生的过程中也经历了稳态业务与敏态业务并存带来的前所…

【docker】安装openjdk

查看可用的 openjdk版本 docker hub 查看地址:https://hub.docker.com/_/openjdk 此图片已被正式弃用,建议所有用户尽快找到并使用合适的替代品。其他官方形象替代品的一些例子(按字母顺序列出,没有有意或暗示的偏好)…

Git 远程管理

Git 远程管理 | CoderMast编程桅杆Git 远程管理 远程仓库操作 对于远程仓库的操作,Git 提供了 git remote 命令,用于用于管理 Git 仓库中的远程仓库。 以下是 git remote 命令的常见用法: 列出当前仓库中已配置的远程仓库 列出当前仓库中已配…

C语言中整型与浮点型在内存中的存储

今天让我们来看看整型的数据和浮点型的数据在内存中是怎么存储的呢 整型数据在内存中的存储 整型数据在内存中存储的是二进制的补码 正数的话也没什么可说的,原码反码补码都相同 我们来看看负数: 以-5为例 原码:10000000 00000000 00000000 0…

GPU深度学习环境搭建:Win10+CUDA 11.7+Pytorch1.13.1+Anaconda3+python3.10.9

1. 查看显卡驱动及对应cuda版本关系 1.1 显卡驱动和cuda版本信息查看方法 在命令行中输入【nvidia-smi】可以当前显卡驱动版本和cuda版本。 根据显示,显卡驱动版本为:Driver Version: 516.59,CUDA 的版本为:CUDA Version 11.7。 此处我们可以根据下面的表1 显卡驱动和c…

docker-MySQL 8 主从搭建

一.目录结构: 我是在/home目录下,建立个sql文件夹: 二、配置文件 1.mysql配置 mysql-master下.conf文件配置 ###### [mysqld] server-id1 # 启用二进制日志 log-binmaster-bin # 指定需要复制的数据库 binlog-do-dbtest_db # 指定二进制日…

Axure中的样式

样式 首先说一下Axure里面的原点位置 如下图: 还有一个办法是我们选中我们的按钮,如上图,然后打开右边的样式,可以看按钮的x,y属性,类似于游戏中unity软件的x,y属性,类似于html中…

机器学习——过拟合

一、过拟合得表现 模型在训练过程中,除了会出现过拟合现象,还有可能出现欠拟合的情况。相比而言,后者通常发生在建模前期,只要做好特征工程一般可以解决模型欠拟合问题。下图描述了模型在训练数据集上的三种情况: 其…