【数据结构——树和二叉树】

【数据结构——树和二叉树】

一、树和二叉树的定义

(一)树的定义

树是n个结点的有限集,它或为空树(n=0);或为非空树
在这里插入图片描述

(二)基本术语

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(三)二叉树的定义

1、二叉树的定义

二叉树是n(n>=0)个结点所构成的集合,他或为空树(n=0),或为非空树,对于非空树:T
(1)有且只有一个称之为根的结点;
(2)除根结点之外的其余结点分为两个互不相交的子集T1和T2,分别称为T的左子树和右子树,且T1和T2本身都是二叉树。

在这里插入图片描述

2、二叉树的基本特点

(1)结点的度小于等于2;
(2)有序树(子树有左右之分,且其次序不能任意颠倒)

在这里插入图片描述

二、二叉树的性质和存储结构

(一)二叉树的性质

在这里插入图片描述
满二叉树:一棵深度为K且有2的K次方-1个结点的二叉树。(特点:每层都充满了结点)
在这里插入图片描述

完全二叉树:深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应。

在这里插入图片描述

(二)二叉树的存储结构

1、顺序存储结构

实现:按完全二叉树的结点层次编号,依次存放二叉树中的数据元素。
特点
(1)结点间关系蕴含在其存储位置中;
(2)浪费空间,适于存满二叉树和完全二叉树。

结点i:
双亲结点:【i/2】
左儿子:2i
右儿子:2i + 1

在这里插入图片描述在这里插入图片描述

#define MAXTSIZE 100   //二叉树的最大结点数
typedef TElemType SqBiTree[MAXTSIZE];//0号单元存储根结点
SqBiTree bt;

2、链式存储结构

(1)二叉链表

在这里插入图片描述

typedef struct BiNode
{
    
    
	TElemType data;   //数据域
	struct BiNode* lchild, * rchild;   //左右孩子指针
}BiNode,*BiTree;   //二叉树结点
BiTree root;

在这里插入图片描述
在n个结点的二叉链表中,有n+1个空指针域

(2)三叉链表
在这里插入图片描述

typedef struct TriTNode
{
    
    
	TElemType data;   //数据域
	struct TriTNode* lchild,* parent * rchild;   //左右孩子指针
}TriTNode,*TriTree;   //二叉树结点

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46518461/article/details/109262296