【数据结构】实验:二叉树的操作和应用(1)

目录

一、实验目的

二、实验要求

三、核心代码

四、实验记录

五、总结

六、完整报告和成果文件提取链接

一、实验目的

  1. 掌握二叉树的非线性和递归特点。
  2. 熟练掌握二叉树的存储结构。
  3. 熟练掌握二叉树的各种遍历操作和其它操作的实现方法。

二、实验要求

二叉树的括号表示为:Str="A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))",同学们可以自己定义,请实现二叉树下列基本运算:

(1)创建二叉树;

(2)先序、中序、后序遍历二叉树(任选一个),输出遍历结果;

(3)层次遍历二叉树;

(4)求结点的总个数或叶子结点的个数;

(5)查找值为X的结点;

(6)删除data域为x的结点及其子孙结点并输出;

(7)求二叉树的宽度;

(8)求二叉树的高度;

(9)输出所有从叶子结点到根节点的路径;

(10)销毁二叉树。以上实验任务可以任选其中的5个子任务,有能力者可以全部完成。

三、核心代码


//先序遍历二叉树
void PreOrder(BTNode *b)
{
	if(b!=NULL)
	{
		printf("%c",b->data);
		PreOrder(b->lchild);
		PreOrder(b->rchild);
	}
}

//二叉树结点总个数
int Nodes(BTNode *b)
{
	if(b==NULL)  return 0;
	else  return Nodes(b->lchild)+Nodes(b->rchild)+1;
}

//删除结点及其子节点
void FreeNode(BTNode *&b)
{
	if(b!=NULL)
	{
		FreeNode(b->lchild);
		FreeNode(b->rchild);
		free(b);
		b=NULL;
	}
} 

//查找值为x的结点并删除 
bool FindNode(BTNode *&b,char x)
{
	if(b==NULL)
	return false;
	if(b->data==x)
	{
		FreeNode(b);
		printf("已经找到此结点!\n");
		return true;
	}
	else if(FindNode(b->lchild,x))  return true;
	else if(FindNode(b->rchild,x))  return true;
	else return false;

}

四、实验记录

五、总结

通过此次实验我掌握二叉树的非线性和递归特点:二叉树是一种非线性的数据结构,它不满足线性关系。在二叉树中,每个节点最多有两个子节点,分别是左子节点和右子节点。二叉树的遍历和操作可以通过递归来实现。前序遍历、中序遍历和后序遍历都是通过递归实现的。

六、完整报告和成果文件提取链接

完整可运行代码以及相关实验报告以下链接可获取:
链接:https://pan.baidu.com/s/1DuGfYm6_KDm04gUKWFSSVQ?pwd=lw6u 
提取码:lw6u 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值