实验项目五 二叉树基本操作的实现

给您带来优质的代码体验,给您带来欢喜^_^

 

课程名称:数据结构

实验项目名称:二叉树基本操作的实现

实验目的:

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;	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章