数据结构——二叉树

一、树

1.树的定义和相关概念

树是一种非线性的数据结构,它是由n个有限节点组成一个具有层次关系的集合。它是根朝上,叶朝下的。

根节点:根节点就是起始点(root),没有前驱节点

除根节点以外,每个节点被分成一棵结构与树类似的子树,每棵子树的根节点有且只有一个前驱,可以有0或多个后继。

树具有的一些性质(区别树与非树)

1.子树是不相交的

2.除根节点以外,每个节点有且只有一个父节点。

3.一颗N个节点的树有N-1条边,即通过N-1条边将N个节点相连,不出现某个节点连多次形成环。

以一个简单的树为例:

相关概念:

节点的度一个节点含有的子树个数,图例中的根节点1的度为2

叶节点(叶子节点):度为0的节点(没有子树的节点),图例中4 8 9 7

父节点与子节点:若一个节点含有子节点,那么该节点就是子节点的父节点。

非终端节点(分支节点):度大于0的节点

树的度:树内各节点的度的最大值

节点的层次:从根开始定义其,根节点为第一层,根的子节点为第二次,类推......

树的高度(或深度):树中节点的最大层次

节点的祖先:从根到该节点所经分支上的所有节点 例如节点4的祖先是 节点1 2

森林: 由 m 棵互不相交的树的集合称为森林

2.树的表示

树的存储比较麻烦,并且涉及到可能含有多个子节点,通常采用孩子兄弟表示法

复制代码
typedef int DataType;
struct Node
 {
      struct Node* firstChild; 
      struct Node* pNextBrother; 
      DataType data; 
 };

二、二叉树

1.二叉树的定义和相关概念

一棵二叉树是节点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵子树(左子树和右子树)的二叉树组成。

特点: 每个节点最多有2个子节点

二叉树的子树的顺序不能颠倒

2.特殊的二叉树

①.满二叉树:一个二叉树,每一层的节点数都达到 2^(n-1) (n为层数 即每层节点数达到最大值),此时总节点数为 2^k-1 (k为树的深度)。

②.完全二叉树

二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

3.二叉树的存储结构

①顺序存储

顺序存储就是用数组来存储,但是顺序存储更适用于完全二叉树,不是完全二叉树会存在空间的浪费,而通常只有堆(一个完全二叉树)才会用数组存储。

②链式存储

链式存储是指运用链表存储 ,用链来表示元素间的关系。链表中每个节点由三个域组成(数据域,左右指针域),左右指针域表示该节点的左右子节点所在链节点的存储地址。另外,还可以由四个域组成,多一个父节点域,存储其父节点所在的地址。

复制代码
typedef struct tree{
	struct tree *left; // 存左子节点
	struct tree *rigth;// 存右子节点
	int data; // 数据域
}tree;

4.二叉树的性质

①若规定根节点的层数为1,则一棵非空二叉树的第 i 层 最多有 2^(i-1)个节点

②深度为 h 的二叉树的最大节点数是 2^h-1

③对任何一棵二叉树,如果叶子节点的个数为n1,度为2的分支节点为n2 则有n2=n1+1

④具有n个节点的满二叉树,其深度为h=log2(n+1)。

参考博文: 数据结构--二叉树--详解_有一棵二叉树,结点编号是1-n每个结点根子树权值和表示结点的个数,-CSDN博客

相关推荐
延凡科技11 小时前
多场景落地复盘:端边云架构无人机智能巡检系统设计与实践
大数据·数据结构·人工智能·科技·架构·无人机·能源
皓月斯语17 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
春日见17 小时前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
萌动的小火苗18 小时前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
叩码以求索18 小时前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana218 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
星恒随风18 小时前
C++ STL 栈详解:stack 的使用、经典题目与简单模拟实现
开发语言·数据结构·c++·笔记·学习
txzrxz18 小时前
单调队列讲解
数据结构·c++·算法·单调队列
Keven_1119 小时前
算法札记:树状数组的用途
数据结构·算法
cpp_250120 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解