0
点赞
收藏
分享

微信扫一扫

[数据结构]树

Sophia的玲珑阁 2022-04-14 阅读 78
数据结构

文章目录

树的基本概念

在这里插入图片描述

有序树

  • 有确定的根
  • 树根和子根之间为有向关系
    在这里插入图片描述
    如上图,是两个不同的树

定义

  • 结点:数据元素+指向子树的分支
  • 结点的度:分支的个数
  • 树的度:树中所有结点的度的最大值
  • 叶子结点:度为零的结点(终点结点)
  • 分支结点:度大于零的结点(非终端结点)
  • 结点的层次:假设根结点的层次为1,第n层的结点的子树根结点的层次为n+1
  • 从根到结点的路径: 孩子结点,双亲结点,兄弟结点,祖先,子孙
  • 树的深度:树中叶子结点所在的最大层次
  • 森林:是m棵互不相交树的集合
  • 任何一棵非空树是一个二元组Tree=(root,F)其中,root被称为根结点,F被称为子树森林

在这里插入图片描述

树型结构和其他表示方法

括号表示法

在这里插入图片描述

嵌套集合表示法

在这里插入图片描述

凹入表示法

在这里插入图片描述

树的存储结构

双亲表示法

#define MAXSIZE 100
typedef char datatype;//结点值的类型
typedef struct node//结点类型
{
datatype data;
int parent;//结点双亲的下标
}node;
typedef struct tree
{
node treelist[MAXSIZE];//存放结点的数组
int length,root;//树中实际所含结点的个数及根结点的位置
}tree;

在这里插入图片描述

孩子表示法

  • 指针方式的孩子表示法

在这里插入图片描述

  • 数组方式的孩子表示法

在这里插入图片描述

  • 链表方式的孩子表示法
    在这里插入图片描述
#define MAXSIZE 50
typedef char datatype;
typrdef struct chnode{//孩子结点类型
int child;
struct chnode *next;
}chnode;
typedef chnode* chpoint;

typedef struct{//树中每个结点类型
datatype data;
chpoint firstchild;//指向第一个子女的指针
}node;

typedef struct{//数的类型
node treelist [MAXSIZE];
int length,root;
}tree;

孩子兄弟表示法

在这里插入图片描述

树的遍历

树的前序,后序,层次遍历算法思想

在这里插入图片描述

void preorder(tree p)//p为指向树根结点的指针
{
int i;
if(p!=NULL)//树不为空
{
printf("%c",p->data);
for(i=0;i<m;++i)
	preorder(p->child[i]);//递归对各子树进行遍历
}
}

在这里插入图片描述

void postorder(tree p)//p为指向树根结点的指针
{
int i;
if(p!=NULL)//树不为空
{
for(i=0;i<m;++i)
	postorder(p->child[i]);//递归对各子树进行遍历
	printf("%c",p->data);
}
}

在这里插入图片描述


建立树的存储结构

如何根据线性输入建立树的链式存储结构?

  • 按前序遍历顺序建立一棵m度树的递归算法
    在这里插入图片描述
tree createtree()
{
int i;
char ch;
tree t;
if((ch=getchar())=='#') t=NULL;
else
{
	t=(tree)malloc(sizeof(node));
	t->data=ch;
	for(i=0;i<m;i++)
		t->child[i]=
}
}

读到A,建立三个子节点

树的前序遍历非递归算法

利用栈实现树的前序搜索
在这里插入图片描述
在这里插入图片描述

树的层次遍历算法实现(队列)

在这里插入图片描述
队列:前面出队,后面进队
在这里插入图片描述

树的括号表示与层号表示法

课后补充

算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由前面式子可得,度为1不进行计算
1+102+203+1=82
在这里插入图片描述

ABEFGHICDJKL//不回到根结点
EGHIFBCJKDLA
ABCDLEFJKGHI

三叉树

在这里插入图片描述
AB###CE###FH###I####G###D###

  • 为什么AB后面三个#
    B有三个空儿子
  • I为什么有4个#
    在这里插入图片描述
举报

相关推荐

0 条评论