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

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.kler.cn/news/335080.html

相关文章:

  • Nginx技术深度解析与实战应用
  • 通信工程学习:什么是RARP反向地址解析协议
  • 【笔记】信度检验
  • 令牌主动失效机制范例(利用redis)注释分析
  • 系统规划与管理——1信息系统综合知识(5)
  • 联想电脑怎么开启vt_联想电脑开启vt虚拟化教程(附intel和amd主板开启方法)
  • 蓝牙定位的MATLAB仿真程序(基于信号强度,平面内的定位,四个蓝牙基站)
  • 鸿蒙OpenHarmony
  • 懒人笔记-QT程序UOS打包篇
  • 105页PPT麦肯锡:煤炭贸易企业业务战略规划方案
  • 查看 Ubuntu 系统中是否安装了 Conda
  • 大学生就业招聘:Spring Boot系统的架构分析
  • 如何在 SQL 中创建一个新的数据库?
  • 【数据结构】【链表代码】 链表的中间节点
  • 融媒体服务中PBO进行多重采样抗锯齿(MSAA)
  • JAVA智慧社区系统跑腿家政本地生活商城系统小程序源码
  • 项目-坦克大战学习笔记-控制玩家坦克不超出地图范围
  • 详解根据IP查询所在国家地区的后台实现方案
  • YoloV8改进策略:BackBone改进|CAFormer在YoloV8中的创新应用,显著提升目标检测性能
  • Docker版MKVtoolnix的安装及中文显示