1.概念

树结构是一种描述非线性层次关系的数据结构

在一个数结构中,有且仅有一个结点没有直接前驱,这个结点就是树的结点。

除根结点外,其余每个结点有且仅有一个直接前驱。

每个结点可以有任意多个直接后继。

2.树的术语

根:有且仅有一个无直接前驱结点的结点

结点的度:结点拥有的子数的数量叫做结点的度

树的度:树内结点的度的最大值

叶子:终端结点

结点的层:从根算起。根为第一层,往下则+1层

树的深度:树的最大层数

森林:去掉根结点所得子数的个数

这里给大家分享一份二叉树与红黑树电子书籍及视频学习,需要的朋友可以加qun720209036获取

3.二叉树

什么是二叉树

结点最多只有两个儿子,叫做二叉树

二叉树的重要性质

第i层上最多有2^(i-1)个结点

深度为k的的二叉树最多有2^k - 1个结点

N0表示叶结点个数,N2表示度为2的非叶结点个数,那么N0=N2+1

二叉数的存储

顺序存储:一般通过结构数组进行存储

链式存储:存储结构包含结点元素及分别指向左子树和右子树的引用

//链式存储
typedef struct treeNode
{
void* NodeData; // 元素数据
struct treeNode* LtreeNode; //左子树结点引用
struct treeNode* RtreeNode; // 右子树结点引用
}TreeNode_T;

二叉树的遍历

先序遍历:1.访问根结点 2.访问椰子树 3.访问右子树

中序遍历:1.访问左子树 2.访问根结点 3.访问右子树

后序遍历:1.访问左子树 2.访问右子树 3.访问根结点

层次遍历:从根结点开始,向下一层一层访问,每层从左到右访问每个结点

如何具体实现?首先需要分析,二叉树遍历的核心问题,需要存储结构保存暂时不访问的结点,可以借助其他数据结构完成,如队列、堆栈

二叉树的先、中、后序递归遍历

核心思想:使用堆栈,先进后出

二叉树的层次遍历

核心思想:使用队列,先进先出,首先根结点入队,当结点出队,访问该结点、将其左右儿子入队

伪代码实现如下

先序遍历的递归实现

void PreOrderTraversal( BinTree BT)
{
if( BT ){
printf("%d",BT->Data);
PreOrderTraversal( BT->left);
PreOrderTraversal( BT->right);
}
}

先序遍历的非递归实现

void InOrderTraversal(BinTree BT)
{
BinTree T=BT;
Stack S = CreatStack(MaxSize);
while(T || !IsEmpty(S) ){
while(T){ //向左一直压栈
printf("%d",T->Data); //访问
Push(S,T);
T = T->Left;
}
if( !IsEmpty(s) ){
T=Pop(s); //结点弹出堆栈
T = T->Righr; //转向右结点
}
}
}

中序遍历的递归实现

void PreOrderTraversal( BinTree BT)
{
if( BT ){
PreOrderTraversal( BT->left);
printf("%d",BT->Data);
PreOrderTraversal( BT->right);
}
}

中序遍历的非递归实现

void InOrderTraversal(BinTree BT)
{
BinTree T=BT;
Stack S = CreatStack(MaxSize);
while(T || !IsEmpty(S) ){
while(T){ //向左一直压栈
Push(S,T);
T = T->Left;
}
if( !IsEmpty(s) ){
T=Pop(s); //结点弹出堆栈
printf("%d",T->Data); //访问
T = T->Righr; //转向右结点
}
}
}

后序遍历的递归实现

void PreOrderTraversal( BinTree BT)
{
if( BT ){
PreOrderTraversal( BT->left);
PreOrderTraversal( BT->right);
printf("%d",BT->Data);
}
}

简述数据字典的结构及其作用_数据结构——树基本概念及其遍历相关推荐

  1. mysql 遍历二叉树_数据结构——树与二叉树的遍历

    目录 树 二叉树 二叉树的遍历 总结 参考资料 序 树是学习数据结构的时候非常重要的一个数据结构,尤其是二叉树更为重要.像Java的HashMap 就使用了红黑树,而Mysql的索引就使用到了B+树. ...

  2. python链表和树实验报告_数据结构树和森林实验报告

    _ 树和森林应用实验 实验报告 实验目的 ( 1) 掌握树和森林的二叉链表表示方法. (2) 掌握树和二叉树的结构及算法之间的对应关系. (3) 掌握树的两种遍历算法及其应用. 实验运行环境 Visu ...

  3. python tree结构_Python入门篇-数据结构树(tree)篇

    Python入门篇-数据结构树(tree)篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.树概述 1>.树的概念 非线性结构,每个元素可以有多个前躯和后继 树是n(n& ...

  4. c++ 删除二叉树的子树_数据结构—树|二叉树|前序遍历、中序遍历、后序遍历【图解实现】...

    点击蓝字关注我们 AI研习图书馆,发现不一样的精彩世界 数据 结构 二叉树的遍历 一.树 在谈二叉树的知识点之前,我们首先来看一下树和图的基本概念.树:不包含回路的连通无向图,树是一种简单的非线性结构 ...

  5. 简述园路的功能作用_智能式多功能电表解析

    一.智能式多功能电表简述 智能电表是智能电网的智能终端,它已经不是传统意义上的电能表,智能电表除了具备传统电能表基本用电量的计量功能以外,为了适应智能电网和新能源的使用它还具有双向多种费率计量功能.用 ...

  6. 安卓如何实现多级结构树_数据结构-树(树基本实现C++)

    ​树形结构是一种重要的非线性数据结构.其中树和二叉树最为常用,直观看来树是以分支关系定义的层次结构.树形结构是我们平时比较熟悉的,比如文件夹目录.公司组织关系等.在计算机领域也得到广泛的应用,编译程序 ...

  7. memset 结构体内指针_数据结构之线性表应用——内存管理

    大家好,我是隔壁小王,前面我给大家讲了数据结构中的线性表,因为是第一次写作,可能很多地方描述得不清楚,真是惭愧至极啊!这两天我花了不少时间来学习如何写作,也看了不少公众号文章,今天我来讲讲线性表的应用 ...

  8. 简述园路的功能作用_园林设计中园路的功能

    园路像人体的脉络一样,是贯穿全园的交通网络,是联系各个景区和景点的纽带和风景线,是组成园林风景的造景要素.园路的走向对园林的通风.光照.环境状况都有一定的影响.因此无论在实用功能上,还是在美观方面,均 ...

  9. mysql索引的概念和作用_索引的基本概念及作用

    索引:是一个数据结构,用来快速访问数据库表格或者视图里的数据,需要存储空间. 数据库的索引的原理:主要用于提高查询效率,也就是按条件查询的时候,先查询索引, 再通过索引找到相关的数据,索引相当于记录了 ...

最新文章

  1. Does GATHER_STATS_JOB gather all objects' stats every time?
  2. 如何在 Linux 中启用 Shell 脚本的调试模式
  3. 【python数据挖掘课程】二十五.Matplotlib绘制带主题及聚类类标的散点图
  4. JVM调优总结(二)
  5. Java虚拟机(JVM)面试题大集合
  6. 免费python课程排行榜-Python培训机构排行榜哪家更好?老男孩Python全栈开发
  7. PyTorch学习—6.PyTorch数据读取机制Dataloader与Dataset
  8. awstats 网站访问统计工具安装
  9. 是谁关闭了Linux抢占,而抢占又关闭了谁?
  10. Linux多线程编程-线程间参数传递
  11. linux内核远程漏洞,Linux内核远程DoS漏洞 (CVE-2019-11477) 预警分析
  12. 统计学中的三大相关系数
  13. 音箱后面接口 COM 8欧 70V 100V
  14. 英语单词词性顺口溜_英语十大词性顺口溜
  15. 《三天三夜》创作者去世,曾一边写歌一边编程
  16. Togaf业务架构-《企业级业务架构设计方法论与实践》解读
  17. 网络协议分为哪几层---物理层,连接层,网络层,传输层,应用层详解
  18. 10 Three.js使用orbit controls插件(轨道控制)来控制模型交互动作
  19. 汽车计算机控制系统及其组成,汽车计算机控制系统的研究.doc
  20. 数组的length属性和String的length()方法

热门文章

  1. 【Python】统计字符串里某个字符或子字符串出现的次数
  2. USTC English Club Note20171022
  3. 科大星云诗社动态20210907
  4. VTK修炼之道61:体绘制_光线投影+最大密度投影+等值面法
  5. 封装的可运行于winform与web的Log4Net的类库
  6. 61条面向对象设计的经验原则
  7. Adversarial Validation 微软恶意代码比赛的一个kenel的解析
  8. 汇编语言之大小写转换问题
  9. vue 下echarts卸载和安装指定版本
  10. eventproxy