数据结构篇 --- 二叉树的概念和性质

发布于:2022-11-01 ⋅ 阅读:(405) ⋅ 点赞:(0)

简述:二叉树的内容较为复杂 初步了解思维导图如下 本篇优先叙述二叉树的概念及性质部分 对于堆和二叉树的链式结构将在之后两篇分别叙述。

目录

 树的概念:

如何表示树:

二叉树

特殊二叉树:

二叉树的性质:

二叉树的存储结构:


 树的概念:

首先我们明确什么是树?

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

之前我们所学的链表、顺序表都是线性结构,而树是一种非线性的结构,这是与之前有所不同的。

 因为看起来像倒挂的嘛 所以树的根在哪? 如上图A 就是整个树的根,向下延伸,D-H-I又可以形成一棵子树 ,那么此时D又是子树的根。

关于树的一些概念:

这里要详细看,不然下面的性质看起来会很吃力

 

如何表示树:

最简单的表示方法是左孩子右兄弟表示法:

typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};

二叉树

什么是二叉树?

就是只有两个叉的树

官方一点就是

一棵二叉树是结点的一个有限集合,该集合:
1. 或者为空
2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成

特殊二叉树:

除去空树之外,-- 就是根节点也是NULL

有两种特殊二叉树:

满二叉树

就是挂的满满登登的二叉树 每个节点都有两个子节点   看图->

 完全二叉树:

除去最后一层 其他都满满登登 最后一层也是从左到右连续都有

满二叉树其实也是完全二叉树的一种情况     看图->

二叉树的性质:

1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1)个结点.
2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h - 1 
3. 对任何一棵二叉树, 如果度为0其叶结点个数为 , 度为2的分支结点个数为 ,则有n0=n2+1
4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=log(n+1) (ps: 是log以2
为底,n+1为对数)
5. 完全二叉树最多只有一个度为1的节点。

6.用顺序结构(下面会提及)存储时

左孩子节点等于父亲节点*2+1

右孩子节点等于孩子节点*2+2

父亲节点等于(孩子节点-1)/2

二叉树的存储结构:

顺序存储:

顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树

注:这种情况只适用完全二叉树, 

否则会造成较大的空间浪费。

链式存储:

这里采用的“左孩子右孩子”法

typedef int BTDataType;
struct BinTreeNode
{
struct BinTreeNode* _pLeft; // 指向当前节点左孩子
struct BinTreeNode* _pRight; // 指向当前节点右孩子
BTDataType _data; // 当前节点值域
}

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到