当前位置: 首页 > news >正文

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

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.mrgr.cn/news/44153.html

相关文章:

  • 本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃
  • 网站集群批量管理-Ansible-模块管理
  • 贪心算法相关知识
  • Linux下网络转发功能
  • Codeforces Round 977 (Div. 2) C2 Adjust The Presentation (Hard Version)(思维,set)
  • 老房翻新,弱配电箱需不需要加?
  • 【Rust练习】17.泛型
  • 音质好且平价的开放式耳机排行榜10强?分享值得安利的蓝牙耳机
  • 留存率的定义与SQL实现
  • 物理学基础精解【56】
  • 新机配置Win11
  • Vue入门-指令学习-v-else和v-else-if
  • jsencrypt实现js加密的另外一种方式(使用node-jsencrypt库)
  • 【AI知识点】归一化(Normalization)
  • 前端的全栈混合之路Meteor篇:开发环境的搭建 -全局安装或使用docker镜像
  • Qt开发技巧(十五)字符串去除空格,跨网段搜索不生效,设置图片显示失败问题,表格视图的批量删除,主动判断字串编码,开启向前查询的属性,画家类载入html来绘制
  • Leecode热题100-560.和为k的子数组
  • 【玩转 JS 函数式编程_008】3.1.2 JavaScript 函数式编程筑基之:箭头函数——一种更流行的写法
  • MATLAB智能优化算法-学习笔记(4)——灰狼优化算法求解旅行商问题【过程+代码】
  • 基于SSM的学生信息管理系统【附源码】