数据结构与算法学习-二叉树

数据结构与算法——从零开始学习(五)树和二叉树 树(tree)是n(n>=0)个结点的有限集合。当n=0时,该集合满足以下条件:(1)有且只有一个特殊的结点称为树的根(root),根结点没有直接前驱结点,但有零个或多个直接后继结点。(2)跟结点之外的其余n-1个结点被分成m(m>0)个互相不相交的集合T1、T2、···、Tm,其中每一个集合Ti(1 阅读详情

二叉树是一种特殊的树型结构,它的每一个结点最多只有两个子结点。

二叉树根据子结点的不同可以分为:

1.完全二叉树:如果一棵树的高度为h,那么除了第h层外,其它各层的结点数都达到最大值,第h层有叶子结点,并且叶子结点都是从左到右依次排布。

2.满二叉树:除了叶节点外每一个节点都有左右子叶且叶子结点都处在最底层的二叉树。

3.平衡二叉树:又称AVL树,它是一棵二叉排序树,具有这样的性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

二叉树都有如下性质:

1.二叉树的第i层最多有2^(i-1)个节点;

2.高度为h的二叉树最后又2^h-1个节点;

3.任意一棵二叉树上,其叶子节点个数比度为2的节点数多1。

二叉树的访问方式:

1.先序遍历:对于每个结点,先访问当前结点,然后访问结点的左子树,最后访问结点的右子树。

2.中序遍历:对于每个结点,先访问结点的左子树,然后访问当前结点,最后访问结点的右子树。

3.后序遍历:对于每个结点,先访问结点的左子树,然后访问当前结点的右子树,最后访问当前结点。

实现代码:

#include<iostream>
using namespace std;
class Node {
public:
    int data;
    Node *lchild, *rchild;
    Node(int _data) {
        data = _data;
        lchild = NULL;
        rchild = NULL;
    }
    ~Node() {
        if (lchild != NULL) {
            delete lchild;
        }
        if (rchild != NULL) {
            delete rchild;
        }
    }
    void preorder() {   //先序遍历
        cout << data << " ";
        if (lchild != NULL) {
            lchild->preorder();
        }
        if (rchild != NULL) {
            rchild->preorder();
        }
    }
    void inorder() {    //中序遍历
        if (lchild != NULL) {
            lchild->inorder();
        }
        cout << data << " ";
        if (rchild != NULL) {
            rchild->inorder();
        }
    }
    void postorder()   //后序遍历
    {
        if(lchild!=NULL)
        {
            lchild->postorder();
        }
        if(rchild!=NULL)
        {
            rchild->postorder();
        }
        cout<<data<<" ";
    }
};
class BinaryTree {
private:
    Node *root;
public:
    BinaryTree() {
        root = NULL;
    }
    ~BinaryTree() {
        if (root != NULL) {
            delete root;
        }
    }
    void build_demo() {
        root = new Node(1);
        root->lchild = new Node(2);
        root->rchild = new Node(3);
        root->lchild->lchild = new Node(4);
        root->lchild->rchild = new Node(5);
        root->rchild->rchild = new Node(6);
    }
    void preorder() {
        root->preorder();
    }
    void inorder() {
        root->inorder();
    }
    void postorder()
    {
        root->postorder();
    }
};
int main() {
    BinaryTree binarytree;
    binarytree.build_demo();
    binarytree.preorder();
    cout << endl;
    binarytree.inorder();
    cout << endl;
    binarytree.postorder();
    cout << endl;
    return 0;
}
还有一种复杂的二叉树叫线索二叉树,后面再补上。
实战指南 | 快速修复Adobe Acrobat 2020安装过程中的常见注册表错误 本文提供了Adobe Acrobat 2020安装过程中遇到“无法打开键”注册表错误的详细修复指南。通过安全编辑注册表,精准定位并删除残留键值,可快速解决此常见安装报错,确保软件顺利安装。同时,文章也介绍了其他安装问题的应对策略与预防措施。 阅读详情

相关推荐

ENVI哨兵一号数据处理

使用ENVI+SarScape处理哨兵数据

Rjjjjj11的博客 2万+

二叉查找树

二叉查找树,也称二叉搜索树,或二叉排序树。其定义也比较简单,要么是一颗空树,要么就是具有如下性质的二叉树: (1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2) 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3) 任意节点的左、右子树也分别为二叉查找树; (4) 没有键值相等的节点。 如上图所示,是不同形态的二叉查找树。 二叉...

qq_32172681的博客 637

反无人机作战体系全解析:从低慢小探测到分层拦截

随着小型无人机在军事和民用领域的广泛使用,低慢小目标探测与拦截成为低空安全的核心挑战。传统防空体系面对成本低廉、飞行高度低、雷达特征小的无人机集群时,暴露出探测难、识别难、处置成本失衡等问题。为应对威胁,反无人机体系采用分层闭环设计,融合雷达、光电、声学与无线电侦测实现多源感知,通过电子战软杀伤与导弹、高炮、激光等硬杀伤手段协同配合,并借助自动化指控系统缩短“传感器到射手”的响应时延。该体系既可支撑战场要地防护,也能为民用低空安防提供参考。围绕分层反制逻辑,梳理探测、软硬杀伤、指控布防及实战短板,提供理解反

weixin_42533120的博客 333

二叉树

二叉树是n(n>=0)个结点的有限集合,二叉树中的节点最多只能有两个子结点。 二叉树的特点: 每个节点最多有两个子树,所以每个节点最多只能有两个子结点。 左子树和右子树是有顺序的,次序不能任意颠倒。 即使树中某个节点只有一棵子树,也需要区分它是左子树还是右子树。 二叉树具有五种基本形态: 空二叉树 只有一个根结点 根结点只有左子树 根结点只有右子树 根结点既有左子树又有右子...

俱往矣 830

Unity URP风格化水面Shader全流程实现与性能优化指南

在游戏开发中,Shader是实现特定视觉风格的核心技术,它通过编写在GPU上运行的程序,控制模型每个像素的最终颜色与光照表现。其原理在于对顶点位置、纹理坐标、光照信息及深度等数据进行一系列数学运算与插值。这项技术的价值在于能够以极高的自由度创造从写实到卡通的各种渲染效果,同时通过算法优化实现对硬件资源的精准控制。在移动游戏、独立游戏等对性能与风格化有强烈需求的场景中,自定义Shader尤为重要。本文聚焦于使用Unity URP渲染管线,从零构建一个高效的风格化水面Shader,详细拆解了深度色、波浪动画、边

weixin_34320724的博客 371

电机控制-PMSM无感FOC控制(四)SVPWM——过调制

上一章我们提到了SVPWM矢量合成的范围在一个平面的矢量圆内,那么当电压矢量超出调制范围时,该怎么做呢?这就是过调制要解决的问题。电机控制-PMSM无感foc控制(三)SVPWM据之前讲解的内容我们可以知道,SVPWM技术在电压空间上模拟了一个近似于圆的电压轨迹,减小了相电流的谐波,降低了电机的谐波损耗,抑制了转矩脉动。然而,SVPWM技术也存在一些问题,合成电压矢量有极限便是其中之一。这个半径为√3/3Vdc的区域也被称作SVPWM的线性区域。

zhuxinmingde的博客 1315

二叉排序树

定义 一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; (3)左、右子树也分别为二叉排序树; 特点 树的结构通常不是一次生成的,而是在查找过程中,当树中不存在 关键字 等于给定值的 结点 时再进行插入。 新插入的结点一定是一个新添加的 叶子结点 ,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。 首先执行查找算法,找出被插结点的父亲结点。 判断被插结点是其父亲.

loserbai的博客 657

抖音小程序:解决获取手机号报错 getPhoneNumber:fail auth deny,登录注册时需要获取用户手机号,getPhoneNumber一直提示错误(Uniapp抖音小程序报错也能解决)

抖音字节小程序获取手机号报错getPhoneNumber:fail auth deny,抖音 小程序 获取手机号 报错 getPhoneNumber:fail auth ,抖音小程序获取手机号始终返回拒绝,抖音小程序获取手机号,已经过了试运营期但依旧报错如何解决,调用 tt.getPhoneNumber 接口报错,登录注册时需要获取用户手机号,getPhoneNumber一直提示getPhoneNumber:fail auth deny,此能力仅支持小程序通过试运营期后可用,默认获取权限,无需申请;unia

✅ 精选推荐文章 4305

数据结构与算法学习笔记:二叉树

写在前面:记录学习《恋上数据结构与算法》的过程。 课程链接地址:https://ke.qq.com/course/385223 目录 树形结构 树的基本概念 二叉树(Binary Tree) 二叉树(Binary Tree)的性质 真二叉树(Proper Binary Tree) 满二叉树(Full Binary Tree) 完全二叉树(Complate Binary Tree) 完全二叉树(Complate Binary Tree)的性质 面试题 国外教材概念 树形结构

baidu_41388533的博客 312

重复点击提交、产生多笔数据、保持数据只操作一次---->接口幂等性校验

幂等校验一、工作真实场景 + 常出现场景二、工作解决方案 + 百度解决方案 一、工作真实场景 + 常出现场景 真实场景:在一次工作中进行成品出库创建成品出库单时,手抖了一下,重复点击了两次确定(提交表单)。结果很神奇的发现居然产生了两笔一模一样的数据(流水号都一样),当时就很懵逼,稍作思考,想想应该是在同一时刻创建了两个出库单。感觉很有意思(因为之前没有遇到过,写代码的时候也没有考虑到这个问题的发生),后面换了一种方式复现场景:提交表单时多次点击Enter按钮,还是会产生多笔重复数据。 常见场景: 订单接

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 6万+

JavaFX 表视图

我们可以使用来自 JavaFX API 的 TableView,TableColumn 和 TableCell 类以表格形式表示数据。通过实现数据模型和应用单元工厂来填充表中的数据。表类可以按列排序数据,并在必要时调整列大小。

2012年开始工作,全栈开发老兵,目前已是一个老师,分享这么多年的心得体会 405

binarytree:终极Python二叉树学习库,快速掌握数据结构与算法 [特殊字符]

想要学习二叉树数据结构却苦于复杂的实现细节?binarytree库为你提供了完美的解决方案!这个强大的Python库让你能够轻松生成、可视化、检查和操作二叉树,是学习数据结构和算法的最佳工具。无论你是准备考试、完成作业还是准备技术面试,binarytree都能帮你节省大量时间,专注于算法本身而不是繁琐的测试数据设置。😊 ## 为什么选择binarytree库?✨ binarytree库是一个

gitblog_00712的博客 1049

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

JasonH2021的博客 404

数据结构与算法-学习笔记(2)-二叉树的遍历

菜鸟一枚, 刚刚学习数据结构与算法, 为了加深理解, 所以与同学们分享学习过程。 今天学习的是, 二叉树的遍历!!! 先序遍历 从根节点开始,先访问根节点,再先序遍历左子树,再先序遍历右子数 (有点递归的感觉) 中序遍历 从根节点开始,先中序序遍历左子树,再访问根节点,再中序遍历右子数 后序遍历 从根节点开始,先后序遍历左子树,,再后序遍历右子数,再访问根节点 若有错误的地方,请同学们指出。...

qq_43765237的博客 235

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

个人数据结构与算法学习总结-二叉树树

树 本总结主要是以“尚硅谷Java算法教程”的学习教程为主,加上一些个人的理解 为何需要树 1、数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 。 2、链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。 缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历) 3、 树存储

qq_39084191的博客 437

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

算法学习总结(3)——二叉树数据结构重点知识总结

一、关键术语 1.节点的度:一个节点含有的子树的个数称为该节点的度; 2. 叶节点或终端节点:度为零的节点; 3. 非终端节点或分支节点:度不为零的节点; 4. 父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 5. 兄弟节点:具有相同父节点的节点互称为兄弟节点; 6.节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 7....

科技D人生 1278

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数据结构与算法——二叉树的学习总结与基本实现

引言 在数据结构与算法的学习中,我们都无法绕开树与二叉树的学习。 之前我们介绍过数组的数据结构,并且也学习了一些基本的查找算法,但是如果我们想要在有序数组中插入一个数据项,就必须要找到数据项的位置,然后将所有插入位置后的数据项全部向后移动一位,来给新的数据项腾出空间,这样一来,其实非常耗费时间。然后我们介绍了另外一种数据结构——链表。链表的插入删除效率较高,我们只需要改变一些引用值就可以了。但是查...

l118 972

学习笔记—数据结构—二叉树(算法题)

在之前我们学习了二叉树顺序实现和二叉树(链式),那么我们将进入算法题部分,Let's Go!

2401_83231468的博客 1244

个人数据结构与算法学习总结——顺序二叉树、线索二叉树

顺序二叉树、线索二叉树 本总结主要是以“尚硅谷Java算法教程”的学习教程为主,加上一些个人的理解 顺序二叉树 1、概念 从数据存储来看,数组存储方式和树 的存储方式可以相互转换,即数组可 以转换成树,树也可以转换成数组, 看右面的示意图。 2、图解 3、顺序二叉树的特点 顺序二叉树通常只考虑完全二叉树 第n个元素的左子节点为 2 * n + 1 第n个元素的右子节点为 2 * n + 2 第n个元素的父节点为 (n-1) / 2 n : 表示二叉树中的第几个元素 4、代码实现 pac

qq_39084191的博客 201

数据结构与算法:二叉树的学习

二叉树学习

m0_66030479的博客 567

数据结构与算法学习day19-翻转二叉树、对称二叉树

因为我们要比较的是根节点的两个子树是否是相互翻转的,进而判断这个树是不是对称树,所以要比较的是两个树,参数自然也是左子树节点和右子树节点。本题遍历只能是“后序遍历”,因为我们要通过递归函数的返回值来判断两个子树的内侧节点和外侧节点是否相等。此时才进入单层递归的逻辑,单层递归的逻辑就是处理 左右节点都不为空,且数值相同的情况。把以上情况都排除之后,剩下的就是 左右节点都不为空,且数值相同的情况。对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,3.确定单层递归的逻辑。节点为空的情况有:(

weixin_48990728的博客 781

【一起学数据结构与算法】全方面学习二叉树(上)

这篇开始会带领大家学习二叉树,会比较深入的去探讨,希望能够给大家有很多的启发!

摸鱼胖嘟嘟的博客 600

数据结构与算法学习笔记-树和二叉树

声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定! 1.树和二叉树的定义 数据的逻辑结构{线性结构{线性表栈(特殊线性表)队列(特殊线性表)字符串、数组、广义表非线性结构{树形结构图形结构 数据的逻辑结构 \begin{cases} 线性结构\begin{cases} 线性表 \\ 栈(特殊线性表) \\ .

qq_53548177的博客 934
上一篇: 数据结构与算法学习-哈希表入门
下一篇: C/C++中结构体占用内存大小的计算方法
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值