LeetCode Hot100 | Day1 | 二叉树:二叉树的直径

news/2024/10/11 16:37:39/

LeetCode Hot100 | Day1 | 二叉树二叉树的直径

主要学习内容:

二叉树深度求法

深度的 left+right+1 得到的是从根结点到叶子结点的节点数量

543.二叉树的直径

[543. 二叉树的直径 - 力扣(LeetCode)](https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/)

解法思路:

说之前先来看一种经典的错误。。

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

哈哈想的是,左右子树最大深度求出来一加,直接完事了,可惜的是这种是错误的

image-20241005162425862

这个是错误示例,很明显,最长的直径在右子树上,而不是左子树加右子树的深度。

不过这也启发我们,说明思路是对的,只是应该有一个记录最大值的变量,然后对每一个节点都进行一遍这个操作,把最大的记录下来就是了

那接下来就是二叉树求深度

1.函数参数和返回值

int maxDepth=-1;
int tra(TreeNode *t)

maxDepth记录最大直径,就是答案

返回值返回以当前结点为根结点的子树的深度

2.终止条件

直到没有数即没有结点要构建就是结束

if(t==nullptr)return 0;

碰到空了不加深度,直接返回0就行

3.本层代码逻辑

int left=tra(t->left);
int right=tra(t->right);
maxDepth=max(maxDepth,left+right+1);
return 1+max(left,right);

left记录左子树深度

right记录右子树深度

更新以当前结点为子树的深度(l+r+1)和maxDepth之间的大小,最大值赋值给maxDepth

更新后,返回上层递归函数当前子树的最大深度

完整代码:

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

最后注意:我们求的直径是边数,(l+r+1求的是节点数),要减去1才是边数。


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

相关文章

压力测试指南-压力测试基础入门

压力测试基础入门 在当今快速迭代的软件开发环境中,确保应用程序在高负载情况下仍能稳定运行变得至关重要。这正是压力测试大显身手的时刻。本文将带领您深入了解压力测试的基础知识,介绍实用工具,并指导您设计、执行压力测试,最…

WSL2环境下Ubuntu的Docker安装与配置

检查是否存在安装残留,移除可能会造成冲突的组件。 for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done从apt Docker仓库中安装官方GPG key: sudo apt-get update …

<OS 有关> Docker.Desktop - Unexpected WSL error #14030 不能启动, 问题已经解决 fixed

Windows Docker.Desktop 想用时报错: “deploying WSL2 distributions ensuring main distro is deployed: deploying "docker-desktop": importing WSL distro "WSL2 is not supported with your current machine configuration. Please enable th…

OpenAI 推出全新 “Canvas” 工具的系统提示词泄露

OpenAI 推出了一款叫做 Canvas 的新工具,用来帮助用户更好地与 ChatGPT 协作写作和编程。 Canvas 允许用户和 ChatGPT 在一个独立的窗口中协作,实时修改内容。这个工具可以帮助改进文本、调整语言、审查和修复代码,甚至转换成不同编程语言。…

C++设计模式——代理模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言 我们经常听到代理服务器「代理服务器是一个中间服务器,能够接收客户端的请求,并代表客户端向服务器发起请求,然后将服…

知识付费的市场有多大

在数字化时代,知识付费如同一股清流,悄然改变了我们的学习方式。那么,这个市场究竟有多大?它的未来又将如何? 近年来,知识付费市场如同坐上了火箭,迅速膨胀。从最初的线上课程、音频讲座&#…

Spring Security之RememberMe

前言 今天我们来聊聊RemenberMe功能,他的实现或许跟你的最初的想法不一样哦。 什么是RememberMe 其实就是“记住我”功能。在我们工作/生活中,总会存在被打断的情况,临时需要去做其他事情。而当我们想回来继续处理的时候,通常都…

DBMS-3.4 SQL(4)——存储过程和函数触发器

本文章的素材与知识来自李国良老师和王珊老师。 存储过程和函数 一.存储过程 1.语法 2.示例 (1) 使用DELIMITER更换终止符后用于编写存储过程语句后,在下次执行SQL语句时记得再使用DELIMITER将终止符再换回分号。 使用DELIMITER更换终止符…