二叉树的操作
任务一:
创建一颗二叉树,并对其进行前序、中序、后序遍历
任务描述:
本关任务:创建一颗二叉树,并对其进行前序、中序、后序递归遍历。
相关知识:
为了完成本关任务,你需要掌握:
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);