【二叉树】二叉树的首次认识:名词理解、种类、存储结构

本文概览:

  1. 本文简要叙述了二叉树的定义和基本名词,不涉及更高层次的性质或抽象的概念;看图,你一定能懂;
  2. 在二叉树的种类中,看不懂没关系,只要做到对该名词有个影响即可;因为在以后学习才会对它有更深度的理解;
  3. 二叉树存储结构就类似于树的存储结构;

 


二叉树的名词定义

  • 定义:
  1. 是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。
  2. 通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。

也就是说,满足以上两个特性的树就是二叉树。

  • 结点的:结点拥有的子女的个数。
  • 叶子(leaf):没有儿子的结点。
  • 分支结点:有儿子的结点。
  • 树的:树中的某个结点最大子女个数。
  •  
  • 层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1。
  • 树的高度(height):为该节点到一片树叶的最长路径的长;
  • 某节点的深度(depth):为从根到该节点的唯一路径长;
  •  
  • 无序树:如果树中结点的各子树之间的次序是不重要的,可以交换位置。
  • 有序树:如果树中结点的各子树之间的次序是重要的, 不可以交换位置。
  • 森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。
  •  
  • 这个路径的长(length)为该路径上的边的条数;
  • 具有相同父亲的节点互称为兄弟(sibling);

 


二叉树的种类

  1. 满二叉树:深度为k的二叉树有2k-1个结点,即树中每个分支结点(非叶结点)都有两棵非空子树。
  2. 完全二叉树:对于一个树高为h的二叉树,如果其①第0层至第h-1层的节点都满,而最下面一层节点不满,并且所有的节点在②左边的连续排列,③空位都在右边。这样的二叉树就是一棵完全二叉树。
  3. 线索二叉树:将一棵普通二叉树以某种次序遍历,并添加线索的过程称为线索化。

 

  1. 最优二叉树:即高效率的哈夫曼判定树。
  2. 最小生成树:权值最小的生成树,就叫做最小生成树;
    ①普里姆算法:选结点,与之相连的最小权值的边,不可出现回路;
    ②克鲁斯卡尔算法:选连线。
     
  3. AOV网(拓扑排序):
    ① 在AOV网中选择一个入度为0(没有前驱)的顶点且输出它;
    ② 在网中删除该顶点及其与该顶点有关的所有股;
    ③ 重复上述两步,直到网中不存在入度为0的顶点为止。
     
  4. 折半查找判定树:以当前查找区间的中间位置序号作为根,左半个子表和右半个子表中的记录序号分别作为根的左子树和右子树的结点,这样构造的二叉树就叫做折半查找判定树。
     
  5. 二叉排序树(二叉查找树):可以是空树,非空时满足:
    ① 若左子树非空,则左子树上所有结点的值均小于根结点的值
    ② 若右子树非空,则右子树上所有结点的值均大于根结点的值
    特点:中序递增;同层,从左至右任然递增。
     
  6. 平衡二叉树:左右子树的高度之差的绝对值≤1,并且左右子树任是平衡二叉树。

 


存储结构

  • 就像在对树的存储结构中所说一样,对于这种特殊的结构,我们得像个办法把它保存下来(放在内存或磁盘中)。然而如何将它的那种树形的结构保存下来,在下次读取时能够恢复成这种结构呢?这,就是存储结构。
  • 存储结构研究的就是:如何将树的这种逻辑物,更好地存储在线性的内存空间中,依然使得其拥有它原来的树形结构。
  • 就像在线性表中,对于一个有限序列(A,B,C,D……),我们把它放在了顺序表(即数组)和链表中一样,二叉树的存储结构也有这类似的两种保存方式。

 

顺序存储结构

二叉树的顺序存储结构中节点的存放次序是:对该树中每个节点进行编号,其编号从小到大的顺序就是节点存放在连续存储单元的先后次序

对于完全二叉树:

  • 二叉树的数组方式孩子存储结构
#define MAX 10
typedef struct node
{
	char data;
	int LeftChild, RightChild;
}node;
node tree[MAX]; //结构体数组
int legth; //节点的实际个数;
int root; //存放根节点的数组下标;

  • 二叉树的数组方式孩子、双亲存储结构
#define MAX 10
typedef struct node
{
	char data;
	int LeftChild, RightChild;
	int parent; //存放双亲的数组下标;
}node;
node tree[MAX];
int legth; //节点的实际个数;
int root; //存放根节点的数组下标;

链式存储结构

typedef struct node
{
	char data;
	struct node *LeftChild, *RightChild;
	//struct node *parent; //有需要父节点的情况;
}BinNode;

typedef BinNode* BinTree;
BinTree root;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值