代码随想录二刷 day16 | 二叉树之104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

news2024/11/22 16:43:21

day16

      • 104.二叉树的最大深度
      • 559.n叉树的最大深度
      • 111.二叉树的最小深度
      • 222.完全二叉树的节点个数

104.二叉树的最大深度

题目链接
解题思路:本题中根节点的高度就是最大深度
二叉树节点的深度: 指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
二叉树节点的高度: 指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)
使用前序求的就是深度,使用后序求的是高度

  1. 确定递归函数的参数和返回值: 参数就是传入树的根节点,返回就返回这棵树的深度,所以返回值为int类型。
    代码如下:
int getdepth(TreeNode* node)
  1. 确定终止条件: 如果为空节点的话,就返回0,表示高度为0。
    代码如下:
if (node == NULL) return 0;
  1. 确定单层递归的逻辑: 先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值 再+1(加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。

代码如下:

int leftdepth = getdepth(node->left);       // 左
int rightdepth = getdepth(node->right);     // 右
int depth = 1 + max(leftdepth, rightdepth); // 中
return depth;

整体c++代码如下:

class solution {
public:
    int getdepth(TreeNode* node) {
        if (node == NULL) return 0;
        int leftdepth = getdepth(node->left);       // 左
        int rightdepth = getdepth(node->right);     // 右
        int depth = 1 + max(leftdepth, rightdepth); // 中
        return depth;
    }
    int maxDepth(TreeNode* root) {
        return getdepth(root);
    }
};

559.n叉树的最大深度

题目链接
解题思路:和上一题类似

class solution {
public:
    int maxDepth(Node* root) {
        if (root == 0) return 0;
        int depth = 0;
        for (int i = 0; i < root->children.size(); i++) {
            depth = max (depth, maxDepth(root->children[i]));
        }
        return depth + 1;
    }
};


111.二叉树的最小深度

题目链接
解题思路:
题目中说最小深度是从根节点到最近叶子节点的最短路径上的节点数量
叶子节点即左右孩子都为空的节点才是叶子节点

  1. 确定递归函数的参数和返回值

参数为要传入的二叉树根节点,返回的是int类型的深度。

代码如下:

int getDepth(TreeNode* node)
  1. 确定终止条件

终止条件也是遇到空节点返回0,表示当前节点的高度为0。

代码如下:

if (node == NULL) return 0;
  1. 确定单层递归的逻辑
    如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。
    反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。
    在这里插入图片描述

代码如下:


int leftDepth = getDepth(node->left);           // 左
int rightDepth = getDepth(node->right);         // 右
                                                // 中
// 当一个左子树为空,右不为空,这时并不是最低点
if (node->left == NULL && node->right != NULL) { 
    return 1 + rightDepth;
}   
// 当一个右子树为空,左不为空,这时并不是最低点
if (node->left != NULL && node->right == NULL) { 
    return 1 + leftDepth;
}
int result = 1 + min(leftDepth, rightDepth);
return result;

整体递归代码如下:

class Solution {
public:
    int getDepth(TreeNode* node) {
        if (node == NULL) return 0;
        int leftDepth = getDepth(node->left);           // 左
        int rightDepth = getDepth(node->right);         // 右
                                                        // 中
        // 当一个左子树为空,右不为空,这时并不是最低点
        if (node->left == NULL && node->right != NULL) { 
            return 1 + rightDepth;
        }   
        // 当一个右子树为空,左不为空,这时并不是最低点
        if (node->left != NULL && node->right == NULL) { 
            return 1 + leftDepth;
        }
        int result = 1 + min(leftDepth, rightDepth);
        return result;
    }

    int minDepth(TreeNode* root) {
        return getDepth(root);
    }
};

222.完全二叉树的节点个数

题目链接
解题思路:

  1. 确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回以该节点为根节点二叉树的节点数量,所以返回值为int类型。

代码如下:

int getNodesNum(TreeNode* cur) {
  1. 确定终止条件:如果为空节点的话,就返回0,表示节点数为0。

代码如下:

if (cur == NULL) return 0;
  1. 确定单层递归的逻辑:先求它的左子树的节点数量,再求右子树的节点数量,最后取总和再加一
    (加1是因为算上当前中间节点)就是目前节点为根节点的节点数量。

代码如下:

int leftNum = getNodesNum(cur->left);      // 左
int rightNum = getNodesNum(cur->right);    // 右
int treeNum = leftNum + rightNum + 1;      // 中
return treeNum;

整体代码如下:


class Solution {
private:
    int getNodesNum(TreeNode* cur) {
        if (cur == NULL) return 0;
        int leftNum = getNodesNum(cur->left);      // 左
        int rightNum = getNodesNum(cur->right);    // 右
        int treeNum = leftNum + rightNum + 1;      // 中
        return treeNum;
    }
public:
    int countNodes(TreeNode* root) {
        return getNodesNum(root);
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/622948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TensorFlow项目练手——天气预测

项目介绍 通过以往的天气数据和实际天气温度&#xff0c;做一次回归预测&#xff0c;模型的输入是当前的所有特征值&#xff0c;而模型的输出是当天的实际天气温度 字段分析 目前已有的数据有348条svc数据&#xff0c;他们的字段分别代表 year&#xff1a;年month&#xff…

美客多卖家攻略:养号技巧分享

在跨境电商平台上成功运营并建立起具有竞争力的店铺并不容易。美客多作为一个颇具影响力的平台&#xff0c;更需要卖家们仔细研究和精心运营。在这里&#xff0c;我将分享一些秘诀&#xff0c;这些秘诀是在我自养号过程中总结出来的&#xff0c;有助于增加销量并提升店铺的排名…

高级数据分析师岗位的职责描述

高级数据分析师岗位的职责描述1 职责&#xff1a; 1.搭建和完善数据中心的数据指标体系与监控预测体系&#xff0c;并推动系统化实现; 2.负责对市场、行业、竞争对手、产品、客户、业务运营等方面数据的收集、分析&#xff0c;完成整理出分析报告、提供数据支持、分析建议; 3.对…

AI 写的高考作文,你打几分?

又是一年高考时&#xff0c;高考真的是人生的一件大事&#xff0c;毕业这么多年&#xff0c;每次看到高考相关信息&#xff0c;还是会不由自主的点进来&#xff0c;其中语文的作文是每年大伙津津乐道的话题。 树先生今天就收到了某条小秘书的【邀请函】&#xff0c;邀请参与「…

Elasticsearch:实用指南

我们将更多地讨论使用 Elasticsearch 的最佳实践。这些做法是一般性建议&#xff0c;可以应用于任何用例。 让我们开始吧。 Bulk Requests 批量 API 使得在单个 API 调用中执行许多索引/删除操作成为可能。 这可以大大增加索引速度。 每个子请求都是独立执行的&#xff0c;因此…

Elasticsearch8.6.0安装

Elasticsearch 8.5.0 安装 Elasticsearch 简介Elasticsearch 8.6.0 安装创建网络拉取镜像运行镜像设置密码修改kibana配置绑定ES代码绑定&#xff1a;手动绑定&#xff1a; 配置ik分词器扩展词词典停用词词典 Elasticsearch 简介 Elasticsearch&#xff08;ES&#xff09; 是一…

Redis搭建分片集群

一、什么是Redis分片集群 1、概念 Redis分片集群是用于将Redis的数据分布在多个Redis节点上的分布式系统。通过分片集群&#xff0c;可以将数据分成多个部分&#xff0c;并将每个部分存储在不同的节点上&#xff0c;以便实现Redis的高可用性和高性能。 2、Redis分片集群原理…

写字楼里的「连接」智慧,撬起万亿新赛道

【潮汐商业评论/原创】 对于新入职的Cherry来说&#xff0c;在新公司上班的体验也是全新的。 每天上班&#xff0c;尚不熟悉的她可以在互动屏的指导下精准找到目的地。办公室的温度、湿度和空气质量&#xff0c;会随着天气条件和人员的密集程度相应调整。休息时Cherry抬头就能…

nc/netcat使用

目录 一、前言1.netcat是什么2.netcat有什么用 二、netcat的使用1.程序文件2.作为HTTP客户端3.作为HTTP服务端4.文件传输 三、问题与思考四、小结 一、前言 1.netcat是什么 netcat是一个基于命令行的网络调试和开发工具。对于windows和linux操作系统中都有适配的程序包,程序文…

AcWing算法提高课-1.3.13机器分配

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 总公司拥有 M M M 台 相同 的高效设备&#xff0c;准备分给下属的 N N N 个分公司。 各分公司若获得这些设备&#xff0c;可以为…

Linux - 第24节 - Linux高级IO(三)

1.Reactor模式 1.1.Reactor模式的定义 Reactor反应器模式&#xff0c;也叫做分发者模式或通知者模式&#xff0c;是一种将就绪事件派发给对应服务处理程序的事件设计模式。 1.2.Reactor模式的角色构成 Reactor主要由以下五个角色构成&#xff1a; 角色解释Handle&#xff08;句…

LVS-DR负载群集的优势和部署实例(我们都会在各自喜欢的事情里变得可爱)

文章目录 一、DR模式数据包流向分析二、DR模式的特点三、DR模式中需要解决的问题问题1解决方式 问题2解决方式 四、LVS-DR部署实例1.配置NFS共享存储器2.配置节点web服务&#xff08;两台的配置相同&#xff09;3.配置LVS负载调度器 一、DR模式数据包流向分析 1.Client 客户端…

【Hello MySQL】数据库基础

目录 1. 什么是数据库 2. 主流数据库 3. MySQL的基本使用 3.1 MySQL安装 3.2 连接 MySQL 服务器 3.3 退出 MySQL 服务器 3.4 服务器&#xff0c;数据库&#xff0c;表关系 3.5 MySQL的配置 4. MySQL架构 5. SQL分类 6. 存储引擎 6.1 存储引擎 6.2 查看存储引擎 6.3 存储引擎对…

Vue.js 中的 $nextTick 方法是什么?有什么作用?

Vue.js 中的 $nextTick 方法是什么&#xff1f; 在 Vue.js 中&#xff0c;$nextTick 方法是一个非常有用的工具&#xff0c;它可以让我们在下一个 DOM 更新周期之前执行回调函数。这个方法可以用于很多场景&#xff0c;比如在 Vue 实例数据改变之后&#xff0c;立即获取更新后…

肠道重要菌属——Dorea菌,减肥过敏要重视它?

谷禾健康 认识 Dorea菌 Dorea菌属于厚壁菌门毛螺菌科&#xff0c;广泛存在于人体肠道内&#xff0c;谷禾数据显示该菌在人群的检出率超89%。该菌最早也是从人体粪便中分离出来。 “Dorea” 目前没有一个确定的译名&#xff0c;Dorea是以法国微生物学家 Joel Dor 的名字命名&…

进入流程化管理不再是奢望,开源快速开发框架助你梦想成真!

在数字化进程快速发展的今天&#xff0c;流程化管理是企业做强做大的重要一步。如何实现流程化管理&#xff1f;如何实现数字化发展目标&#xff1f;这些问题都是值得每一个企业深思的重要课题。开源快速开发框架是一种快速帮助企业提质增效的平台软件&#xff0c;可以让每一个…

使用gcc展示完整的编译过程(gcc预处理模式、编译模式、汇编模式、连接模式)

最近在了解 clang/llvm 的时候突然发现一件事&#xff1a;gcc是一个工具集合&#xff0c;包含了或者调用将程序源代码转换成可执行程序文件的所有工具&#xff0c;而不只是简单的编译器。这帮助我对“编译器”有了更深刻的理解&#xff0c;所以写下本文作为记录。 关于“编译器…

如何用Web服务组件IIS免费搭建站点,并实现外网远程访问?

作为一名程序猿&#xff0c;经常会有搭建网站的需求&#xff0c;或被朋友要求帮忙着搭建网站&#xff0c;但是如果将网站建设在个人电脑或公司的服务器上&#xff0c;面临的问题是&#xff0c;没有公网IP或屏蔽了外网的80端口&#xff0c;在外网环境下就无法直接内网的网站&…

chatgpt赋能python:将一行数变成列——Python简单实现

将一行数变成列——Python简单实现 在数据处理时&#xff0c;我们常常会遇到将一行的数据转换成列的情况&#xff0c;例如将多个数据在Excel表格中拆分为不同的列。这时候&#xff0c;Python可以帮助我们快速实现这个功能。 什么是Python&#xff1f; Python是一种高级&…

linux ubi文件系统加载失败“too large reserved_peds”

今天要升级linux根文件系统ubi&#xff0c;结果简单打包工作&#xff0c;就有一个始终不正确&#xff0c;花了不少时间&#xff0c;总算搞明白了。 我使用了两个打包脚本&#xff0c;脚本1是一个整个系统打包脚本&#xff0c;脚本2是一个专门给文件系统打包的脚本。 脚本1的部…