数据结构 实验四 二叉树的操作

二叉树的操作

任务一
创建一颗二叉树,并对其进行前序、中序、后序遍历

任务描述
本关任务:创建一颗二叉树,并对其进行前序、中序、后序递归遍历。

相关知识
为了完成本关任务,你需要掌握:
1.如何创建一棵二叉树
2.如何对二叉树进行三种遍历。

- 创建一棵二叉树

最简单的算法就是使用递归算法。
利用二叉树的递归特性
创建一棵二叉树的递归算法:
当树不为空树时
{
创建根结点,给根结点赋值
递归创建左子树
递归创建右子树
}

- 二叉树的前序、中序、后序遍历

根据根结点的位置不同,可分为前序、中序、后序三种遍历方式。
前序:根结点-左子树-右子树
中序 左子树-根结点-右子树
后序 左子树-右子树-根结点
以中序遍历为例,递归算法如下
void INORDER(bitree *t)
{if(t不为空)
INORDER(t的左子树)
输出根结点(注意,按%4d格式输出,可以测试结果匹配)
INORDER(t的右子树)

}

- 注意事项

本程序中用到malloc函数,应加上头文件<stdlib.h>或<malloc.h>
NULL在编译器中已经预定义,表示空指针,可以直接使用。
注意二叉树的结点输入是以先序遍历的方式进行输入。如果左子树或右子树为空,输入0表示空树。如需要创建如下图所示的二叉树,输入序列为:
1 2 4 0 0 5 8 0 0 0 3 6 0 0 7 0 9 0 0
在这里插入图片描述
输出根结点时,按照%4d的格式输出,可以测试集匹配。

测试说明

测试输入:1 2 3 0 0 0 0

先序遍历的结果: 3 2 1
中序遍历的结果: 1 2 3
后序遍历的结果: 3 2 1

测试输入:1 2 3 0 0 0 4 0 5 0 0

前序遍历的结果: 1 2 3 4 5
中序遍历的结果: 3 2 1 4 5
后序遍历的结果: 3 2 5 4 1

  • 示例代码如下:(温馨提示:本文全部代码只在 EduCoder 平台上通过测试,仅供参考,如有运行错误请自行改正)
/*-----------------------------------bitree1.c----------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
typedef struct node 
{
    int data;  
  struct node *lchild,*rchild;
} bitree; 

/*-----------请在下面区域补充代码---begin---------------------------------------------*/

bitree *creat() //建立二叉树的递归算法
{
   
	bitree *t;
	int x;
	scanf("%d",&x);
	if(x==0)
	t=NULL;   //以x=0表示输入结束
	else
	{
   
		t=malloc(sizeof(bitree));
		t->data=x;
		t->lchild=creat();
		t->rchild=creat();
	}
	return t;
}
void preorder(bitree *t)
{
   
	if (t!=NULL)
	{
   
	printf("%4d",t->data);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值