實驗項目五 二叉樹基本操作的實現

給您帶來優質的代碼體驗,給您帶來歡喜^_^

 

課程名稱:數據結構

實驗項目名稱:二叉樹基本操作的實現

實驗目的:

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