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

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

主要学习内容:

二叉树深度求法

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

543.二叉树的直径

[543. 二叉树的直径 - 力扣(LeetCode)](https://leetcode.cn/problems/diameter-of-binary-tree/description/?envType=problem-list-v2&envId=2cktkvj&difficulty=EASY)\](https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/) ##### 解法思路: 说之前先来看一种经典的错误。。 ```c++ 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](https://img-blog.csdnimg.cn/img_convert/a1bbcb76967e510529b7b406aa0520d2.png) 这个是错误示例,很明显,最长的直径在右子树上,而不是左子树加右子树的深度。 不过这也启发我们,说明思路是对的,只是应该有一个记录最大值的变量,然后对每一个节点都进行一遍这个操作,把最大的记录下来就是了 那接下来就是二叉树求深度 **1.函数参数和返回值** ```c++ int maxDepth=-1; int tra(TreeNode *t) ``` maxDepth记录最大直径,就是答案 返回值返回以当前结点为根结点的子树的深度 **2.终止条件** 直到没有数即没有结点要构建就是结束 ```c++ if(t==nullptr) return 0; ``` 碰到空了不加深度,直接返回0就行 **3.本层代码逻辑** ```c++ 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 更新后,返回上层递归函数当前子树的最大深度 **完整代码:** ```c++ 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才是边数。

相关推荐
沙威玛_LHE17 小时前
树和二叉树
数据结构·算法
py有趣18 小时前
LeetCode算法学习之两数之和 II - 输入有序数组
学习·算法·leetcode
夏鹏今天学习了吗18 小时前
【LeetCode热题100(62/100)】搜索二维矩阵
算法·leetcode·矩阵
BreezeJuvenile19 小时前
外设模块学习(15)——MQ-2烟雾气体传感器(STM32)
stm32·单片机·学习·mq-2·烟雾气体传感器
吃着火锅x唱着歌20 小时前
LeetCode 1128.等价多米诺骨牌对的数量
算法·leetcode·职场和发展
ᐇ95921 小时前
Java HashMap深度解析:数据结构、原理与实战指南
java·开发语言·数据结构
十八岁讨厌编程21 小时前
【算法训练营 · 补充】LeetCode Hot100(中)
算法·leetcode
橘颂TA21 小时前
【剑斩OFFER】算法的暴力美学——最小覆盖字串
算法·c/c++·就业
wearegogog12321 小时前
基于混合蛙跳算法和漏桶算法的无线传感器网络拥塞控制与分簇新方法
网络·算法
XH1.21 小时前
学习RT-thread(RT-thread定时器)
stm32·单片机·学习