给您带来优质的代码体验,给您带来欢喜^_^
课程名称:数据结构
实验项目名称:二叉树基本操作的实现
实验目的:
1.掌握树的基本操作—遍历。
实验要求:
1、 分别用递归和非递归的方法实现一棵树的三种遍历。
实验过程:
1、 创建一棵二叉树(二叉树如下图所示);
2、 用递归算法实现对该树的三种遍历;
3、 用非递归算法实现对该树的三种遍历;
4、 输入选项:0或1,0为递归遍历,1为非递归遍历。
5、 根据输入的选项,分别调用递归或非递归算法输出先序、中序、后序遍历序列。
实验报告中给出先序和后序遍历的非递归实现算法代码。
实验结果:
1、输入:ABD##E##CF#G###(创建二叉树)
2、输入:0(递归算法)
3、输出: 先序遍历:ABDECFG
中序遍历:DBEAFGC
后序遍历:DEBGFCA
4、输入:1(非递归实现)
5、输出: 先序遍历:ABDECFG
中序遍历:DBEAFGC
后序遍历:DEBGFCA
实验分析:
1.分析递归与非递归实现的相同点及不同点;
2.列举调试运行过程中出现的错误并分析原因。
要求:
(1) 程序要添加适当的注释,程序的书写要采用缩进格式。
(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。
(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 上传源程序到课堂派。顺序表的源程序保存为TraversalBTree.cpp。
妙啊!简直是妙啊!!做一道这么有意思的题、领悟巧妙的算法难道不比玩游戏、看小说强上100倍?
目前只写出了递归算法的二叉树遍历,非递归的待补。。。
#include <stdio.h>
#include <iostream>
#include <algorithm>
#define MaxInt 32767
#define MVNum 100
#define OK 1
#define ERROR 0
using namespace std;
typedef int Status;
typedef char TElemType;
//二叉树的二叉链表存储表示
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序遍历的递归算法
void PreOrderTraverse(BiTree T)
{
if(T)
{
cout<<T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//中序遍历的递归算法
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
cout<<T->data;
InOrderTraverse(T->rchild);
}
}
//后序遍历的递归算法
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data;
}
}
//先序遍历的顺序建立二叉链表
void CreateBiTree(BiTree &T)
{
char ch;
printf("请依次输入节点:");
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
int main()
{
BiTree T;
CreateBiTree(T);
printf("请输入一个数字0或1,0表示递归算法实现遍历,1表示非递归算法实现遍历:");
bool choose;
cin>>choose;
if(choose==0)
{
printf("先序遍历:");
PreOrderTraverse(T);
puts("");
printf("中序遍历:");
InOrderTraverse(T);
puts("");
printf("后序遍历:");
PostOrderTraverse(T);
puts("");
}
return 0;
}