当前位置:网站首页>树基本概念
树基本概念
2022-06-30 20:06:00 【生活需要深度】
概要
本章先对二叉树的相关理论知识进行介绍,然后给出C语言的详细实现。关于二叉树的学习,需要说明的是:它并不难,不仅不难,而且它非常简单。初次接触树的时候,我也觉得它似乎很难;而之所产生这种感觉主要是由于二叉树有一大堆陌生的概念、性质等内容。而当我真正的实现了二叉树再回过头来看它的相关概念和性质的时候,觉得原来它是如此的简单!因此,建议在学习二叉树的时候:先对二叉树基本的概念、性质有个基本了解,遇到难懂的知识点,可以画图来帮助理解;在有个基本的概念之后,再亲自动手实现二叉查找树(这一点至关重要!);最后再回过头来总结一下二叉树的理论知识时,你会发现——它的确很简单!在代码实践中,我以"二叉查找树,而不是单纯的二叉树"为例子进行说明,单纯的二叉树非常简单,实际使用很少。况且掌握了二叉查找树,二叉树也就自然掌握了。
本篇实现的二叉查找树是C语言版的,后面章节再分别给出C++和Java版本的实现。您可以根据自己熟悉的语言进行实践学习!
请务必深刻理解、实践并掌握"二叉查找树"!它是后面学习AVL树、伸展树、红黑树等相关树结构的基石!
目录
1. 树的介绍
2. 二叉树的介绍
3. 二叉查找树的C实现
4. 二叉查找树的C测试程序
转载请注明出处:二叉查找树(一)之 图文解析 和 C语言的实现 - 如果天空不死 - 博客园
更多内容: 数据结构与算法系列 目录
(01). 二叉查找树(一)之 图文解析 和 C语言的实现
(02). 二叉查找树(二)之 C++的实现
(03). 二叉查找树(三)之 Java的实现
树的介绍
1. 树的定义
树是一种数据结构,它是由n(n>=0)个有限节点组成一个具有层次关系的集合。
- 如果n=0,称为空树
- 如果n>0,则:
- 有一个特定的称之为根(root)的结点,它只有直接后继,但没有直接前驱
- 除了根以外的其他结点划分为m(m>=0)个互不相交的有限集合T0,T1,...,Tn-1,每个集合又是一颗树,并且称之为根的子树(subtree)


把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
(01) 每个节点有零个或多个子节点;
(02) 没有父节点的节点称为根节点;
(03) 每一个非根节点有且只有一个父节点;
(04) 除了根节点外,每个子节点可以分为多个不相交的子树。
2. 树的基本术语
若一个结点有子树,那么该结点称为子树根的"双亲",子树的根是该结点的"孩子"。有相同双亲的结点互为"兄弟"。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。
结点的度:结点拥有的子树的数目。
叶子:度为零的结点。
分支结点:度不为零的结点。
树的度:树中结点的最大的度。
层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1。
树的高度:树中结点的最大层次。
无序树:如果树中结点的各子树之间的次序是不重要的,可以交换位置。
有序树:如果树中结点的各子树之间的次序是重要的, 不可以交换位置。
森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。





1.3 树中设计常见的操作


2. 树的存储结构

树结构需要添加删除结点,数组存储是否可以灵活?每个结点的子节点可以有多个,如何存储?

2.2 树存储结点关系

通用树表示方法采用双亲孩子表示法模型建立的,这种表示方法每个结点都有一个指向其双清的指针,每个结点都有若干个指向其孩子的指针。
另外一种树结构模型称为孩子兄弟表示法模型,每个结点都有一个指向其第一个孩子的指针,每个结点都有一个指向其第一个右兄弟的指针。
这种结构对应的每个结点包含一个数据指针和两个结点指针:
- 数据指针指向保存于树中的数据
- 孩子结点指针指向第一个孩子
- 兄弟结点指针指向第一个右兄弟


孩子兄弟表示法的特点:
- 能够表示任意的树形结构
- 每个节点中有且仅有三个指针域,数据指针、孩子结点指针、兄弟节点指针
- 每个结点的结构简单,只有孩子结点指针和兄弟结点指针构成的树杈
选择使用链表组织树节点,能够遍历的存储结点,链表的维护具有一定复杂性。
边栏推荐
- 大神詳解開源 BUFF 增益攻略丨直播
- Web主机iptables防火墙安全脚本
- CADD course learning (1) -- basic knowledge of drug design
- STL的基本组成部分
- PHP require/include 区别
- 黑苹果 服务器系统安装教程,黑苹果安装教程,详细教您黑苹果怎么安装[通俗易懂]
- 好高的佣金,《新程序员》合伙人计划来袭,人人皆可参与
- SQL优化
- Summary of operating system interview questions (updated from time to time)
- Pytorch implements the calculation of flops and params
猜你喜欢

25:第三章:开发通行证服务:8:【注册/登录】接口:接收并校验“手机号和验证码”参数;(重点需要知道【利用redis来暂存数据,获取数据的】的应用场景)(使用到了【@Valid注解】参数校验)

Document contains & conditional competition

基于开源流批一体数据同步引擎ChunJun数据还原—DDL解析模块的实战分享
Source code analysis of redis ziplist compressed list

Big God explains open source buff gain strategy live broadcast

左值引用和右值引用

GeoServer installation
![Jerry's touch key recognition process [chapter]](/img/cf/8dacbb7f80e427276df6201dddd377.png)
Jerry's touch key recognition process [chapter]

CADD course learning (2) -- target crystal structure information

杰理之触摸按键识别流程【篇】
随机推荐
杰理之关于长按复位【篇】
Common questions and answering skills of project manager interview
Introduction to neural network (Part 1)
25: Chapter 3: developing pass service: 8: [registration / login] interface: receiving and verifying "mobile number and verification code" parameters; (it is important to know the application scenario
Implementation principle of PostgreSQL heap table storage engine
凌云出海记 | 一零跃动&华为云:共助非洲普惠金融服务
AVL平衡二叉树(一) - 概念与C语言实现
Jenkins打包拉取不到最新的jar包
[try to hack] windows system account security
Tensorflow2.4 implementation of repvgg
Originpro 2021 with installation tutorial
Summary of operating system interview questions (updated from time to time)
基于开源流批一体数据同步引擎ChunJun数据还原—DDL解析模块的实战分享
居家办公没有“血泪史”| 社区征文
基于slate构建文档编辑器
数据库 OLAP、OLTP是什么?相同和不同?适用场景
最新海康摄像机、NVR、流媒体服务器、回放取流RTSP地址规则说明[通俗易懂]
开会,OneMeeting,OK!
Perl转换文件的编码类型
操作系统面试题汇总(不定期更新)