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

算法打卡 Day19(二叉树)-平衡二叉树 + 二叉树的所有路径 + 左叶子之和 + 完全二叉树的节点个数

Leetcode 101-平衡二叉树

文章目录

  • Leetcode 101-平衡二叉树
    • 题目描述
    • 解题思路
  • Leetcode 257-二叉树的所有路径
    • 题目描述
    • 解题思路
  • Leetcode 404-左叶子之和
    • 题目描述
    • 解题思路
  • Leetcode 222-完全二叉树的节点个数
    • 题目描述
    • 解题思路

题目描述

https://leetcode.cn/problems/balanced-binary-tree/description/

在这里插入图片描述

解题思路

二叉树节点的深度是指从根节点到该节点的最长简单路径边的条数。

二叉树节点的高度是指从该节点到叶子节点的最长简单路径边的条数。

这道题我们使用递归,采用后序遍历的方法,不断获得左右节点的高度,并在中间节点比较其高度是否符合平衡二叉树的要求

class Solution {
public:int getHight(TreeNode* root) {if (root == nullptr) return 0;int leftHeight = getHight(root->left);if (leftHeight == -1) return -1;int rightHeight = getHight(root->right);if (rightHeight == -1) return -1;int result;if (abs(leftHeight - rightHeight) > 1) result = -1;else result = 1 + max(leftHeight , rightHeight); return result;}bool isBalanced(TreeNode* root) {return getHight(root) == -1 ? false : true;}
};

Leetcode 257-二叉树的所有路径

题目描述

https://leetcode.cn/problems/binary-tree-paths/description/

在这里插入图片描述

解题思路

采用前序算法依次遍历

class Solution {
public:void tranversal(TreeNode* cur, vector<int>& path, vector<string>& result) {path.push_back(cur->val);//中if (cur->left == nullptr && cur->right == nullptr) {string sPath;for (int i = 0; i < path.size()-1; i++) {sPath += to_string(path[i]);sPath += "->";}sPath += to_string(path[path.size() - 1]);result.push_back(sPath);return;}if (cur->left) {tranversal(cur->left, path, result);path.pop_back();//回溯}if (cur->right) {tranversal(cur->right, path, result);path.pop_back();//回溯}}vector<string> binaryTreePaths(TreeNode* root) {vector<string>result;vector<int>path;if (root == nullptr)return result;tranversal(root, path, result);return result;}
};

Leetcode 404-左叶子之和

题目描述

在这里插入图片描述

解题思路

叶子节点的左右子节点都为 nullptr,左叶子节点指的是该叶子节点是父节点的左节点。

采用递归后序遍历的方式解决:

class Solution {
public:int sumOfLeftLeaves(TreeNode* root) {if (root == nullptr) return 0;if (root->left == nullptr && root->right == nullptr) return 0;int leftValue = sumOfLeftLeaves(root->left);//左if (root->left && root->left->left == nullptr && root->left->right == nullptr) leftValue = root->left->val;int rightValue = sumOfLeftLeaves(root->right);//右int sum = leftValue + rightValue;//中return sum;}
};

Leetcode 222-完全二叉树的节点个数

题目描述

在这里插入图片描述

解题思路

完全二叉树的定义是:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1-2^h 个节点。

不考虑完全二叉树的特性,仅将其当作普通二叉树,采用后序遍历的代码为:

class Solution {
public:int countNodes(TreeNode* root) {if (root == nullptr) return 0;int leftNode = countNodes(root->left);int rightNode = countNodes(root->right);int sum = leftNode + rightNode + 1;return sum;}
};

此时我们将所有节点都遍历了一遍,因此时间复杂度为 O ( n ) O(n) O(n)

为了降低时间复杂度,我们可以利用完全二叉树的特性,即对于满二叉树,其节点个数为(2^n-1),在遍历过程中仅仅遍历两侧的节点,从而可以降低时间复杂度

class Solution {
public:int countNodes(TreeNode* root) {if (root == nullptr) return 0;TreeNode* left = root->left;TreeNode* right = root->right;int leftDepth = 1, rightDepth = 1;while (left) {//遍历左侧深度left = left->left;leftDepth++;}while (right) {//遍历右侧深度right = right->right;rightDepth++;}if (leftDepth == rightDepth)return (pow(2, leftDepth) - 1);//如果为满二叉树则根据公式直接计算节点个数int leftNum = countNodes(root->left);int rightNum = countNodes(root->right);int sum = leftNum + rightNum + 1;return sum;}
};

相关文章:

算法打卡 Day19(二叉树)-平衡二叉树 + 二叉树的所有路径 + 左叶子之和 + 完全二叉树的节点个数

Leetcode 101-平衡二叉树 文章目录 Leetcode 101-平衡二叉树题目描述解题思路 Leetcode 257-二叉树的所有路径题目描述解题思路 Leetcode 404-左叶子之和题目描述解题思路 Leetcode 222-完全二叉树的节点个数题目描述解题思路 题目描述 https://leetcode.cn/problems/balanced…...

国际以太网专线 (IEPL)/国际专线(IPLC)-全球覆盖,无界沟通

中国联通国际公司产品&#xff1a;国际以太网专线 (IEPL)/国际专线&#xff08;IPLC&#xff09;—— 跨境数据传输的坚实桥梁 在全球化日益加深的今天&#xff0c;跨境、跨地域的数据传输需求激增&#xff0c;企业对数据传输的速度、安全性和稳定性提出了前所未有的高要求。中…...

信息安全管理知识体系攻略(至简)

信息安全管理知识体系主要包括信息安全管理体系、信息安全策略、信息安全系统、信息安全技术体系等。 一、信息安全管理 1、信息安全管理体系&#xff08;ISMS&#xff09;。ISO27001是国际标准化组织&#xff08;ISO&#xff09;和国际电工委员会&#xff08;ICE&#xff09…...

HCIE学习笔记:IPV6 地址、ICMP V6、NDP 、DAD (更新补充中)

系列文章目录 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、IPV4、IPv6包头对比1. IPV4包头2.IPv6包头3.IPV6扩展包头 二、IPV6基础知识地址结构、地址分类三、ICMPV4、ICMPV61、 lnternet控…...

人工智能】Transformers之Pipeline(九):物体检测(object-detection)

目录​​​​​​​ 一、引言 二、物体检测&#xff08;object-detection&#xff09; 2.1 概述 2.2 技术原理 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipel…...

[SWPUCTF 2021 新生赛]easy_md5

分析代码&#xff1a;1.包含flag2.php 2.GET传name&#xff0c;POST传password $name ! $password && md5($name) md5($password) 属于MD5绕过中的php 弱类型绕过 解题方法: 方法一 import requests# 网站的URL url "http://node7.anna.nssctf.cn:28026&q…...

Redis面试题大全

文章目录 Redis有哪几种基本类型Redis为什么快&#xff1f;为什么Redis6.0后改用多线程?什么是热key吗&#xff1f;热key问题怎么解决&#xff1f;什么是热Key&#xff1f;解决热Key问题的方法 什么是缓存击穿、缓存穿透、缓存雪崩&#xff1f;缓存击穿缓存穿透缓存雪崩 Redis…...

【langchain学习】BM25Retriever和FaissRetriever组合 实现EnsembleRetriever混合检索器的实践

展示如何使用 LangChain 的 EnsembleRetriever 组合 BM25 和 FAISS 两种检索方法&#xff0c;从而在检索过程中结合关键词匹配和语义相似性搜索的优势。通过这种组合&#xff0c;我们能够在查询时获得更全面的结果。 1. 导入必要的库和模块 首先&#xff0c;我们需要导入所需…...

【C语言】预处理详解(上)

文章目录 前言1. 预定义符号2. #define 定义常量3. #define定义宏4. 带有副作用的宏参数5. 宏替换的规则 前言 在讲解编译和链接的知识点中&#xff0c;我提到过翻译环境中主要由编译和链接两大部分所组成。 其中&#xff0c;编译又包括了预处理、编译和汇编。当时&#xff0c…...

uni-app内置组件(基本内容,表单组件)()二

文章目录 一、 基础内容1.icon 图标2.text3.rich-text4.progress 二、表单组件1.button2.checkbox-group和checkbox3.editor 组件4.form5.input6.label7.picker8.picker-view 和 picker-view-column9.radio-group 和 radio10.slider11.switch12.textarea 一、 基础内容 1.icon…...

linux搭建redis超详细

1、下载redis包 链接: https://download.redis.io/releases/ 我以7.0.11为例 2、上传解压 mkdir /usr/local/redis tar -zxvf redis-7.0.11.tar.gz3、进入redis-7.0.11&#xff0c;依次执行 makemake install4、修改配置文件redis.conf vim redis.conf为了能够远程连接redis…...

Flink-DataWorks第二部分:数据集成(第58天)

系列文章目录 数据集成 2.1 概述 2.1.1 离线&#xff08;批量&#xff09;同步简介 2.1.2 实时同步简介 2.1.3 全增量同步任务简介 2.2 支持的数据源及同步方案 2.3 创建和管理数据源 文章目录 系列文章目录前言2. 数据集成2.1 概述2.1.1 离线&#xff08;批量&#xff09;同步…...

4个从阿里毕业的P7打工人,当起了包子铺的老板

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&chksmc0e47813f793f105017fb8551c9b996dc7782987e19efb166ab665f44ca6d900210e6c4c0281&scene21#wechat_redirect 《网安面试指南》h…...

javaweb_07:分层解耦

一、三层架构 &#xff08;一&#xff09;基础 在请求响应中&#xff0c;将代码都写在controller中&#xff0c;看起来内容很复杂&#xff0c;但是复杂的代码总体可以分为&#xff1a;数据访问、逻辑处理、接受请求和响应数据三个部分。在程序中我们尽量让一个类或者一个方法…...

调用 Python 开源库,获取油管英文视频的手动或自动英文srt字幕,以及自动中文简体翻译srt字幕

前提条件 非常抱歉&#xff0c;这个程序就是个雏形&#xff0c;非常不完善&#xff0c;输入需要手动编辑&#xff0c;凑活着可以用&#xff0c;请自己完善吧。 开源声明&#xff1a;此文代码引用了一个开源MIT License的Python库&#xff0c;其他代码是本人自写自用。你可以随…...

UDP协议实现通信与数据传输(创建客户端和服务器)

目录 一、UDP &#xff08;传输层&#xff0c;用户数据报协议&#xff09; 二、服务器Server的创建 三、客户端Client的创建 四、效果实现&#xff08;描述&#xff09; 一、UDP &#xff08;传输层&#xff0c;用户数据报协议&#xff09; UDP&#xff08;User Datagram Pr…...

【红黑树】

红黑树 小杨 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&am…...

排序算法——简单选择排序

一、算法原理 简单选择排序是一种基本的排序算法&#xff0c;其原理是每次从未排序的元素中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后与未排序部分的第一个元素交换位置&#xff0c;直到所有元素都被排序。 二、算法实现流程 简单选择排序法(Simple Se…...

OpenAI API推出结构化输出功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

Python 异步编程:Sqlalchemy 异步实现方式

SQLAlchemy 是 Python 中最流行的数据库工具之一&#xff0c;在新版本中引入了对异步操作的支持。这为使用异步框架&#xff08;如 FastAPI&#xff09;开发应用程序带来了极大的便利。在这篇文章中&#xff0c;简单介绍下 SQLAlchemy 是如何利用 Greenlet 实现异步操作的。 什…...

用Python给双足机器人做个“不倒翁”大脑:线性倒立摆仿真入门(附完整代码)

用Python给双足机器人做个“不倒翁”大脑&#xff1a;线性倒立摆仿真入门&#xff08;附完整代码&#xff09; 当你在公园里看到小朋友玩不倒翁时&#xff0c;有没有想过双足机器人也需要类似的"不倒"能力&#xff1f;线性倒立摆模型&#xff08;LIPM&#xff09;就是…...

国内网站 SEO 推广需要多长时间见效

国内网站 SEO 推广需要多长时间见效 在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为提升国内网站流量和品牌知名度的关键手段。很多人都会问&#xff0c;国内网站 SEO 推广需要多长时间才能见效&#xff1f;答案并不简单&#xff0c;因为这涉及…...

实战演练:基于Next.js与快马AI接口,构建可交互的qoderwork官网演示版

今天想和大家分享一个实战项目&#xff1a;用Next.js模拟搭建qoderwork官网&#xff0c;并集成快马AI的代码生成能力。这个项目特别适合想学习全栈开发的朋友&#xff0c;既能练手Next.js&#xff0c;又能体验AI接口的集成。 项目整体设计思路 这个模拟官网主要包含两大核心功…...

避坑指南:CentOS7升级内核开启BBR加速最常见的5个错误及解决方法

CentOS7内核升级与BBR加速避坑实战手册 每次在CentOS 7服务器上折腾内核升级和BBR加速时&#xff0c;总会遇到各种"惊喜"。记得第一次操作时&#xff0c;我盯着黑屏的服务器足足半小时&#xff0c;心跳快得像是刚跑完马拉松。本文将分享那些只有踩过坑才知道的实战经…...

Java 25 虚拟线程新特性与实践:构建更高效的并发系统

Java 25 虚拟线程新特性与实践&#xff1a;构建更高效的并发系统 别叫我大神&#xff0c;叫我 Alex 就好。 一、引言 大家好&#xff0c;我是 Alex。Java 虚拟线程&#xff08;Virtual Threads&#xff09;自 Java 21 引入以来&#xff0c;已经成为 Java 并发编程的重要变革。…...

别再傻傻分不清!一张图看懂PMOS、NMOS和CMOS在电路设计中的真实区别

从物理特性到电路设计&#xff1a;PMOS、NMOS与CMOS的实战解析 在电子工程领域&#xff0c;MOSFET晶体管就像乐高积木一样构成了现代集成电路的基础模块。但面对PMOS、NMOS这对"双胞胎"时&#xff0c;许多初学者常常陷入困惑——为什么数字电路总爱用CMOS结构&#x…...

论文降AI之前要做哪些AIGC自检:完整自查流程

论文降AI之前要做哪些AIGC自检&#xff1a;完整自查流程 被问了太多次降AI前自检相关的问题&#xff0c;写一篇完整教程。 主要工具是嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元。第一次用的话有些细节知道和不知道差别挺大的。 操作前准备 开始…...

C++笔记 Lambda表达式

Lambda表达式是C11引入的核心特性之一&#xff0c;本质是一种匿名函数&#xff0c;可以捕获作用域内的变量&#xff0c;无需单独定义函数名&#xff0c;就能实现简洁、灵活的代码编写&#xff0c;尤其适合作为回调函数、算法参数&#xff08;如STL算法&#xff09;等场景&#…...

如何快速提升Windows性能:Win11Debloat一键优化指南

如何快速提升Windows性能&#xff1a;Win11Debloat一键优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cust…...

2025届毕业生推荐的降重复率神器解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 如果要降低AIGC检测率&#xff0c;那就得着重从文本特征方面着手。首先&#xff0c;词汇多样…...