算法题-二叉树

news2024/9/23 11:24:40

二叉树

二叉树的理论知识

二叉树的种类

满二叉树

满二叉树:如果一棵二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层,则此二叉树为满二叉树(深度为k,有2^k-1个节点的二叉树)。
满二叉树

完全二叉树

在完全二叉树中,除了底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的位置。
完全二叉树
优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。

二叉搜索树

二叉搜索数是一个有序树

  • 若左子树不空,则左子树上所有结点的值均小于根节点的值;
  • 若右子树不空,则右子树上所有结点的值均大于根节点的值;
  • 它的左,右子树也分别为二叉排序树
    二叉搜索树
    中序遍历二叉搜索树得到的数组是一个递增数组
平衡二叉搜索树

它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
平衡二叉搜索树
注:c++中map,set,multimap,multiset的底层实现都是平衡二叉树,所以map,set的增删操作时间复杂度是logn。(比如构造set的过程中,插入的数据必须满足红黑树的规则,因此会不断进行调整,确保最后生成的set中的数据是有序的)

#include <iostream>
#include <set>

int main() {
    std::set<int> mySet;

    // 插入一些元素
    mySet.insert(10);
    mySet.insert(20);
    mySet.insert(15);
    mySet.insert(5);
    mySet.insert(1);

    // 输出 set 中的元素
    for (int x : mySet) {
        std::cout << x << " ";
    }
    std::cout << std::endl;

    return 0;
}

程序运行结果
map、set、multimap 和 multiset 的底层实现使用平衡二叉树(如红黑树),以保证在对数时间复杂度内完成插入、删除和查找操作。通过使用红黑树,这些容器能够有效地管理有序数据,并提供高效的操作性能。

二叉树的存储方式

二叉树可以链式存储,也可以顺序存储
链式存储方式用指针,顺序存储用数组

二叉树的遍历方式

二叉树主要有两种遍历方式,深度优先遍历和广度优先遍历

  • 深度优先遍历
    前序遍历(根左右,递归法和迭代法)
    中序遍历(左根右,递归法和迭代法)
    后序遍历(左右根,递归法和迭代法)
    注:栈是递归的一种实现结构,深度优先遍历可以借助栈用递归的方式来实现
  • 广度优先遍历
    层次遍历(迭代法)
    注:广度优先遍历一般用队列实现

二叉树的实现

链式存储二叉树节点的定义方式

struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL){}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right){}
};

二叉树相关的力扣题

二叉树的递归遍历

二叉树的前序遍历

题目

class Solution {
public:
    void traversal(TreeNode* cur, vector<int>& vec)
    {
        if (cur == nullptr)
        {
            return;
        }
        vec.push_back(cur->val);
        traversal(cur->left, vec);
        traversal(cur->right, vec);
    }
    vector<int> preorderTraversal(TreeNode* root) 
    {
       vector<int> res;
       traversal(root, res);
       return res; 
    }
};

二叉树的迭代遍历

二叉树的统一迭代法

二叉树的层序遍历

翻转二叉树

对称二叉树

二叉树的最大深度

二叉树的最小深度

完全二叉树的节点个数

平衡二叉树

二叉树的所有路径

左叶子之和

找树左下角的值

路径总和

从中序与后序遍历序列构造二叉树

最大二叉树

合并二叉树

二叉搜索数中的众数

二叉树的最近公共祖先

二叉搜索树的最近公共祖先

二叉搜索树的插入操作

删除二叉搜索树中的节点

修剪二叉搜索树

将有序数组转换为二叉搜索树

把二叉搜索树转换为累加树

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

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

相关文章

PostgreSQL 中如何解决因长事务阻塞导致的其他事务等待问题?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何解决因长事务阻塞导致的其他事务等待问题&#xff1f;一、了解长事务阻塞的原因&…

降Compose十八掌之『利涉大川』| Canvas

公众号「稀有猿诉」 原文链接 降Compose十八掌之『利涉大川』| Canvas 任何一个GUI框架都会提供大量的预定义的UI部件&#xff0c;让开发者构建UI页面&#xff0c;但有些时候预定义的部件无法满足需求&#xff0c;这时就需要定制&#xff0c;甚至是自定义绘制的内容。对…

快手ip地址为什么会乱跳城市

在数字化时代&#xff0c;网络IP地址已成为我们数字身份的一部分&#xff0c;它既是网络空间中的“门牌号”&#xff0c;也是我们在网络世界中的“身份证”。然而&#xff0c;近期有不少快手用户反映&#xff0c;他们的IP地址在使用过程中出现了乱跳城市的现象&#xff0c;引发…

用好六西格玛培训中的DOE工具,让产品和过程优化不再难——张驰咨询

在六西格玛培训中&#xff0c;试验设计&#xff08;Design of Experiments&#xff0c;简称DOE&#xff09;是一种至关重要的工具&#xff0c;它不仅有助于系统地规划和分析试验&#xff0c;还能显著提升产品和过程的改进效率。DOE通过最小化试验次数&#xff0c;同时最大化信息…

大数据基础:Hadoop之Yarn重点架构原理

文章目录 Hadoop之Yarn重点架构原理 一、Yarn介绍 二、Yarn架构 三、Yarn任务运行流程 四、Yarn三种资源调度器特点及使用场景 Hadoop之Yarn重点架构原理 一、Yarn介绍 Apache Hadoop Yarn(Yet Another Reasource Negotiator&#xff0c;另一种资源协调者)是Hadoop2.x版…

Windows安装PostgreSQL

PostgreSQL是一种功能齐全的对象-关系型数据库管理系统&#xff08;ORDBMS&#xff09;&#xff0c;它以加州大学伯克利分校计算机系开发的POSTGRES项目为基础&#xff0c;经过多年的发展&#xff0c;已成为一个高度可扩展、支持多种数据类型、具备复杂查询能力的数据库系统。在…

MoonBit 全新语法:级联运算符

✨MoonBit 引入了 “..” 操作符&#xff0c;能够优雅地对可变 API 进行链式调用&#xff0c;同时保持可变 API 签名的整洁&#xff08;依然返回 Unit&#xff09;

昇思25天学习打卡营第19天|sea_fish

打卡第19天。本次学习的内容为生成式中的Diffusion扩散模型。记录学习的过程。 模型简介 什么是Diffusion Model&#xff1f; 如果将Diffusion与其他生成模型&#xff08;如Normalizing Flows、GAN或VAE&#xff09;进行比较&#xff0c;它并没有那么复杂&#xff0c;它们都…

PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践

大家好&#xff0c;我是码农先森。 我之前待过一个做 ToB 业务的公司&#xff0c;主要是研发以会员为中心的 SaaS 平台&#xff0c;其中涉及的子系统有会员系统、积分系统、营销系统等。在这个 SaaS 平台中有一个重要的角色「租户」&#xff0c;这个租户可以拥有一个或多个子系…

Text Control 控件教程:文本和表格相互转换

文档布局中的一项典型任务是将使用制表位创建的纯文本表格转换为完全格式化的表格。在本文中&#xff0c;我们将向您展示如何通过检测制表位并将其转换为包含位置的表格单元格&#xff0c;将纯文本表格转换为表格。 TX Text Control 是一款功能类似于 MS Word 的文字处理控件&…

统计HTML 标签CSS 属性 和 JS 关键字

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>统计HTML 标签、CSS 属性 和 JS 关键字</title> </head> <style>#container {display: flex;}li {list-style: none;} </styl…

【青书学堂】2024年第一学期 平面设计(高起专) 作业

【青书学堂】2024年第一学期 平面设计(高起专) 作业 为了方便日后复习&#xff0c;青书学堂成人大专试题整理。 若有未整理的课程&#xff0c;请私信我补充&#xff0c;欢迎爱学习的同学们收藏点赞关注&#xff01;文章内容仅限学习使用&#xff01;&#xff01;&#xff01; 第…

MacCleaner Pro Mac系统综合清理工具包 释放磁盘空间,提高整体性能

MacCleaner Pro 是一款专为 Mac 用户设计的软件工具&#xff0c;用于优化和清理他们的系统。它提供了一系列功能来帮助用户加速他们的 Mac&#xff0c;释放磁盘空间&#xff0c;并提高整体性能。 MacCleaner Pro 的一些主要功能包括&#xff1a; 系统清理&#xff1a;此功能有…

捷配笔记-如何确保PCB信号完整性?

三十年的电子设计历程&#xff0c;是一段从微米到纳米的跨越之旅。1987年&#xff0c;0.5微米工艺曾被视为技术的极限&#xff0c;而如今22纳米工艺已成为行业的新标准。本文将回顾这段技术革新的历程&#xff0c;并探讨在这一过程中我们所面临的挑战与应对策略。 技术演进的里…

python自动化flask库-从数据库里取出数据

实现效果&#xff1a;写一个接口&#xff0c;从mysql数据库读到user表的数据&#xff08;用户名和密码&#xff09;&#xff0c;把数据作为回参 用到的库&#xff1a;flask&#xff0c;pymysql 代码&#xff1a; from flask import Flask, jsonify import pymysql# 连接数据…

python-箭形图案(赛氪OJ)

[题目描述] 小理学习了循环&#xff0c;老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“ ∗ ”组成的箭形图案。输入格式&#xff1a; 一行一个整数 n。输出格式&#xff1a; 针对输入的 n &#xff0c;输出用“ ∗ ”组成的箭形。 …

AirSim+PX4联合仿真

AirSim启动设置 windows上的AirSim要想通过PX4进行控制,需要配置一下参数,进入如下路径的AirSim文件,找到settings.json文件,采用记事本打开,并编辑里面的内容。 可以参考如下内容:其中ip要对应,linux上PX4导入的ip即为此处的localhostip,也是WSL服务的ip。 {"S…

Java中的Stack(栈)(如果想知道Java中有关Stack的知识点,那么只看这一篇就足够了!)

前言&#xff1a;栈&#xff08;Stack&#xff09;是一种基础且重要的数据结构&#xff0c;以其后进先出&#xff08;LIFO, Last In First Out&#xff09;的特性广泛应用于计算机科学和编程中。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼…

XLPR车牌自动识别开发包

XLPR SDK适用于为各种应用增加车牌自动识别能力&#xff0c;支持多个区域检测&#xff0c;支持车牌颜色和号码输出&#xff0c;提供Web API和 原生API。官方下载地址&#xff1a;XLPR车牌识别开发包。 XLPR主要由三个主要部分构成&#xff1a;D-Net、R-NET和C-Net&#xff0c;…

初识Spring6框架

个人笔记梳理&#xff0c;仅供参考 Spring是一款主流的JavaEE轻量级开源框架 Spring的狭义和广义 广义的Spring&#xff1a;Spring技术栈 泛指以Spring Framework为核心的Spring技术栈 经过十多年的发展&#xff0c;Spring已经不再是一个单纯的应用框架&#xff0c;而是逐…