0
点赞
收藏
分享

微信扫一扫

QT实战项目之WPS编辑器

泠之屋 2024-09-03 阅读 29

目录

一、树的概念

 二、树结点之间的关系

三、二叉树

 1、满二叉树

2、完全二叉树

四、二叉树的存储

 1、顺序存储

2、链式存储

一、树的概念

        如果数据和数据之间满足一对多的关系,将其逻辑结构称之为树

        如下图:树的根与树的分支存在一对多的关系

b54e4257f7104888806cc26e65f1dcf5.jpeg

         将上图具体化,从根节点开始,每个节点都有一个或者多个分支,当然还有没有分支的情况

         6da1bbb1c5a94f73a8d5d6383acfeee5.png

 二、树结点之间的关系

三、二叉树

        二叉树是树的一种特殊形式,即每个分支最多只有两个子结点

        55c09fa69acd4803b253821ac58017c3.png 

 1、满二叉树

         每个结点的度都为2,即每个结点都有两个子节点,(即二叉树中每个结点的子结点都是满的)

edf5e215872843c1be3e1d835c4f1541.png

2、完全二叉树

四、二叉树的存储

 1、顺序存储

2、链式存储

使用链式存储方式实现二叉树的创建和遍历,创建如下图的二叉树

//二叉树的应用
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
//创建根节点
struct tree_node
{
	char date;
	struct tree_node *left;//左树指针
	struct tree_node *right;//右树指针
};
//先序创建
//利用递归创建二叉树,返回类型为下一个结点的地址,实现递归创建
struct tree_node * tree_create()
{
	struct tree_node *node=NULL;//创建一个指针存放节点地址,初始化为空
	char str;//用来存储创建的数据
	scanf(" %c",&str);//从终端获取要创建的二叉树
	if(str=='#')//如果接受到字符#,即这个结点没有
		return NULL;
	node=(struct tree_node*)malloc(sizeof(struct tree_node));//新创建的结点
	if(node==NULL)
	{
		printf("结点创建失败\n");
		return NULL;
	}
	node->date=str;
	//递归创建左子树
	node->left=tree_create();
	//递归创建右子树
	node->right=tree_create();
	return node;
}
//先序遍历
bool tree_erg_fir(struct tree_node *root)
{
	if(root==NULL)
	{
		return false;
	}
	printf("%c",root->date);
	tree_erg_fir(root->left);
	tree_erg_fir(root->right);
}
//中序遍历
bool tree_erg_middle(struct tree_node *root)
{
	if(root==NULL)
	{
		return false;
	}
	tree_erg_middle(root->left);
	printf("%c",root->date);
	tree_erg_middle(root->right);
}
//后序遍历
bool tree_erg_behind(struct tree_node *root)
{
	if(root==NULL)
	{
		return false;
	}
	tree_erg_behind(root->left);
	tree_erg_behind(root->right);
	printf("%c",root->date);
}
int main(int argc, const char *argv[])
{
	printf("请输入二叉树,创建方式为先序创建:\n");
	struct tree_node *root=tree_create();
	//先序遍历
	tree_erg_fir(root);
	printf("\n");
	//中序遍历
	tree_erg_middle(root);
	printf("\n");
	//后序遍历
	tree_erg_behind(root);
	printf("\n");

	return 0;
}

输出如下;

请输入二叉树,创建方式为先序创建:
ABDE###F##CM###
ABDEFCM
EDBFAMC
EDFBMCA

举报

相关推荐

0 条评论