亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stdafx.cpp

?? c語言代碼
?? CPP
字號:

/*
  實驗題目:二叉的遍歷
  開發思想:本實驗分別用了遞歸和非遞歸來實現前序、中序、后序
			方式的遍歷二叉樹,還實現了層次遍歷,并求出樹高。
			在這些實現中,主要用到的是隊列鏈和鏈棧。
  開發人員:葛興高
  開發日期:2004、10、29
*/

#include "stdafx.h"
#include <iostream.h>

//-------------------------------------------
//-------------------------------------------
//-------------------------------------------
//-------------------------------------------
//二叉樹的實現
//-------------------------------------------

//初始化二叉樹為空
BuildTree::BuildTree()
{
	head=new TreeNode;
}
//-------------------------------------------
//析構函數
BuildTree::~BuildTree()
{
}
//-------------------------------------------
//建立二叉樹
//這里使用一個非遞歸的前序遍歷方法進行建樹
void BuildTree::Create()
{
	//定義一個字符數組,存放建樹所用的點
	char *ch;
	ch=new char[100];

	int i=0;
	int j=0;
	
	stack S;

	//新定義一個指針,并為其申請空間
	TreeNode *current;
	current=new TreeNode;
	
	do
	{
		cin>>ch[i];
		i++;
	}while(ch[i-1]!=35);

	current->data=ch[j];
	head=current;
	S.Push(head);//首先把頭結點入棧
	current=head;//當前指針指向頭結點
	
	while(ch[j+1]!='#')
	{
		j++;
		int flag=1;//flag標志,用來恢復向右走的功能
		TreeNode *p=new TreeNode;

		//建立左子樹
		if(ch[j]=='.')
		{
			p->data=NULL;
			current->lchild=p;
			current=current->lchild;
		}
		else
		{
			p->data=ch[j];
			current->lchild=p;
			current=current->lchild;
		}
		if(current->data!=NULL)
		{
			S.Push(current);
		}
		else
		{
			//建立右子樹
			while(flag==1)
			{
				current=S.Pop();
				TreeNode *q=new TreeNode;
				j++;
				if(ch[j]=='.')
				{
					q->data=NULL;
					current->rchild=q;
					current=current->rchild;
				}
				else
				{
					q->data=ch[j];
					current->rchild=q;
					current=current->rchild;
				}
				if(current->data!=NULL)
				{
					S.Push(current);
					flag=0;//每次向右走一次就必須向左走
				}
				else
				{
					if(ch[j+1]=='#')
						flag=0;
					else
						flag=1;
				}
			}
		}
	}
}
//-------------------------------------------
//從文件中讀進樹的結點進行建立二叉樹
/*void BuildTree::CreateTree(char *file)
{
	Queue q;
	ifstream inFile;
	inFile.open(file);

	TreeNode *current;
	current=new TreeNode;

	//把從文件讀入的數存放到各個二叉樹的結點,
	//再把各個結點入列,以便可以把后面的數一
	//個一個存入到二叉樹中
	inFile>>head->data;
	//inFile.get();
	q.EnQueue(head);//記錄第一個結點
	inFile>>head->lchild->data;
	//inFile.get();
	q.EnQueue(head->lchild);//記錄結點的左孩子
	inFile>>head->rchild->data;
	inFile.get();
	//q.EnQueue(head->rchild);//記錄結點的右孩子
	
	
	//把文件中還沒有完全輸入的數繼續輸入
	while(inFile)
	{
		current=q.DelQueue();
		if(current->lchild->data!='#')
		{
			q.EnQueue(current->lchild);
			inFile>>current->lchild->lchild->data;
			inFile>>current->lchild->rchild->data;
			inFile.get();
		}
		else if(current->rchild->data!='#')
		{
			q.EnQueue(current->rchild);
			inFile>>current->rchild->lchild->data;
			inFile>>current->rchild->rchild->data;
			inFile.get();
		}
	}
}*/
//-------------------------------------------
//遞歸的前序遍歷
void BuildTree::PreOrder_1(TreeNode *t,int first,int i)
{
	TreeNode *p;
	p=new TreeNode;

	if(first)
	{
		p=head;
		first=0;
	}
	else 
		p=t;
	if(p->data!= NULL)
	{
		Record[i]=p->data;
		cout<<p->data<<" ";
		i++;
		PreOrder_1(p->lchild,first,i);
		PreOrder_1(p->rchild,first,i);
	}
}
//-------------------------------------------
//非遞歸的前序遍歷
void BuildTree::PreOrder_2(TreeNode *t)
{
	TreeNode *p=new TreeNode;
	stack s;	//引入一個堆棧對象

	int i=0;

	p=head;
	s.Push(p);
	while(!s.IsEmpty())
	{
		p=s.Pop();
		//Record[i]=p->data;
		cout<<p->data<<" ";
		i++;
		if(p->rchild->data!=NULL)
			s.Push(p->rchild);
		if(p->lchild->data!=NULL)
			s.Push(p->lchild);
	}
}
//-------------------------------------------
//遞歸的中序遍歷
void BuildTree::InOrder_1(TreeNode *t,int first,int i)
{
	TreeNode *p=new TreeNode;
	
	if(first)
	{
		p=head;
		first=0;
	}
	else 
		p=t;
	if(p->data!=NULL)
	{
		InOrder_1(p->lchild,first,i);
		//Record[i]=p->data;
		//i++;
		//cout<<endl<<"遞歸中序遍歷:"<<endl;
		cout<<p->data<<" ";
	 	
		InOrder_1(p->rchild,first,i);
	}
}
//-------------------------------------------
//非遞歸的中序遍歷
void BuildTree::InOrder_2(TreeNode *t)
{
	TreeNode *p=new TreeNode;
	stack s;
	int i=0;

	p=head;

	while((!s.IsEmpty())||(p->data!=NULL))
	{
		while(p->data!=NULL)
		{
			s.Push(p);
			p=p->lchild;
		}
		if(!s.IsEmpty())
		{
			p=s.Pop();
			//Record[i]=p->data;
			//cout<<endl<<"非遞歸中序遍歷:"<<endl;
			cout<<p->data<<" ";
			//i++;
			p=p->rchild;
		}
	}
}
//-------------------------------------------
//遞歸的后序遍歷
void BuildTree::PostOrder_1(TreeNode *t,int  first,int i)
{
	TreeNode *p;

	if(first)
	{
		p=head;
		first=0;
	}
	else p=t;
	if(p->data!=NULL)
	{
		PostOrder_1(p->lchild,first,i);
		PostOrder_1(p->rchild,first,i);
		//cout<<"遞歸后序遍歷";//Record[i]=p->data;
		cout<<p->data<<" ";
		//i++;
	}
}
//-------------------------------------------
//非遞歸的后序遍歷
void BuildTree::PostOrder_2(TreeNode *t)
{
	TreeNode *p;//定義p為當前指針

	//int i=0;
	int flag;
	stack s1,s2;

	p=head;
	//s1.Push(p);

	while((!s1.IsEmpty())||(p->data!=NULL))
	{
		while(p->data!=NULL)
		{
			s1.Push(p);
			s2.Push1(0);
			p=p->lchild;
		}
		if(!s1.IsEmpty())
		{
			p=s1.Pop();
			flag=s2.Pop1();
			///////////////////
			if(p->rchild->data!=NULL)
			{
				flag=1;
				p=p->rchild;
			}
			///////////////////
			if(flag==0)
				cout<<p->data<<" ";
			else
			{
				s1.Push(p);
				s2.Push1(1);
				p=p->rchild;
			}
		}
	}

}
//-------------------------------------------
//層次遍歷
void BuildTree::LayerOrder(void)
{
	TreeNode *p;
	Queue q;

	//int i=0;
	if(head!=NULL)
		q.EnQueue(head);
	while(!q.IsEmpty())
	{
		p=q.DelQueue();
		//Record[i]=p->data ;
		//i++;
		cout<<p->data<<" ";
		if(p->lchild->data!=NULL)
			q.EnQueue(p->lchild);
		if(p->rchild->data!=NULL)
			q.EnQueue(p->rchild);
	}
}
//-------------------------------------------
//求出樹的高
int BuildTree::GetHigh(TreeNode *t,int first)
{
	int CurrentHigh,LeftHigh,RightHigh;
	TreeNode  *current;

	if(first==1)
	{
		current=head;
		first=0;
	}
	else 
		current=t;
	if(current->data==NULL)
		CurrentHigh=0;
	else 
	{
		LeftHigh=GetHigh(current->lchild,first);
		RightHigh=GetHigh(current->rchild,first);
		if(LeftHigh>RightHigh)
			CurrentHigh=LeftHigh+1;
		else
			CurrentHigh=RightHigh+1;
	}
	return (CurrentHigh);
}
//---------------------------------------------------------
//---------------------------------------------------------
//---------------------------------------------------------
//---------------------------------------------------------
stack::~stack()
{
}
//---------------------------------------------------------
//入棧
void stack::Push(TreeNode *x)
{
	LinkNode *p;
	p=new LinkNode;

	p->data = x;
	p->next = Top;
	Top=p;
}
//----------------------------------------------------------
//出棧
TreeNode* stack::Pop ()
{
	LinkNode *p;
	p=new LinkNode;

	if(!IsEmpty())
	{
		p=Top;
		Top=Top->next ;
		return p->data;
	}
	else return 0;
}
//----------------------------------------------------------
//判斷鏈棧是否為空
int stack::IsEmpty ()
{
	if (Top==NULL)
		return 1;
	else
		return 0;
}
//----------------------------------------------------------
void stack::Push1(int i)
{
	LinkNode1 *p;
	p=new LinkNode1;

	p->data = i;
	p->next = Top1;
	Top1=p;
}
//----------------------------------------------------------
//出棧
int stack::Pop1 ()
{
	LinkNode1 *p;
	p=new LinkNode1;

	if(!IsEmpty1())
	{
		p=Top1;
		Top1=Top1->next ;
		return p->data;
	}
	else return 0;
}
//----------------------------------------------------------
int stack::IsEmpty1 ()
{
	if (Top1==NULL)
		return 1;
	else
		return 0;
}


//-------------------------------------------
//-------------------------------------------
//-------------------------------------------
//-------------------------------------------
//隊列的實現
//-------------------------------------------
//-------------------------------------------
Queue::~Queue(void)
{
}
//-------------------------------------------
//入列
void Queue::EnQueue(TreeNode *x)
{
	QueNode *p;
	p=new QueNode;

	p->data = x;
	rear->next=p;
	rear=p;
}
//-------------------------------------------
//出列
TreeNode* Queue::DelQueue ()
{
	QueNode *p;
	p=new QueNode;
	if(!IsEmpty())
	{
		p=front->next;
		front->next=p->next;
	}
	if(p==rear)
		rear=front;
	return p->data;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清精品在线| 亚洲国产wwwccc36天堂| 亚洲一区二区在线观看视频| 麻豆极品一区二区三区| 成人涩涩免费视频| 91精品国产综合久久香蕉麻豆 | 欧美人妇做爰xxxⅹ性高电影| 日韩欧美中文字幕精品| 中文字幕中文字幕在线一区| 另类成人小视频在线| 色综合久久中文字幕| 久久久美女艺术照精彩视频福利播放| 国产日韩欧美亚洲| 麻豆一区二区在线| 欧美日韩精品一区二区| 亚洲欧洲日韩av| 国产高清视频一区| 久久久久久久久久久久久女国产乱| 亚洲风情在线资源站| 91蜜桃网址入口| 中文字幕日韩av资源站| 国产成人精品亚洲日本在线桃色| 精品入口麻豆88视频| 日韩精品电影在线| 日韩一区二区三区视频| 午夜精品久久久久久久蜜桃app| 色偷偷成人一区二区三区91 | 成人毛片在线观看| 久久综合久色欧美综合狠狠| 精品午夜一区二区三区在线观看| 日韩一区国产二区欧美三区| 日韩影院精彩在线| 7777精品久久久大香线蕉| 午夜不卡av免费| 欧美日韩一级片网站| 亚洲第一会所有码转帖| 欧美日韩国产在线播放网站| 亚洲18女电影在线观看| 欧美一级精品大片| 久99久精品视频免费观看| 久久综合五月天婷婷伊人| 九九**精品视频免费播放| 久久影院午夜论| 粉嫩嫩av羞羞动漫久久久| 中文字幕中文在线不卡住| www.日韩大片| 亚洲最色的网站| 日韩欧美自拍偷拍| 国产99久久精品| 亚洲精品菠萝久久久久久久| 在线国产电影不卡| 久久国产生活片100| 国产农村妇女精品| 在线免费不卡视频| 天天综合色天天| 久久精品欧美日韩精品| 国产成人鲁色资源国产91色综| 国产精品久久久久影院色老大| 91同城在线观看| 日韩成人一级大片| 中文字幕视频一区| 3d动漫精品啪啪1区2区免费| 国产乱码精品1区2区3区| 亚洲人成在线播放网站岛国| 欧美一级高清大全免费观看| 国产一区 二区 三区一级| 日韩一区在线播放| 精品处破学生在线二十三| 97久久精品人人澡人人爽| 青青青伊人色综合久久| 久久久91精品国产一区二区三区| av爱爱亚洲一区| 久久精品国产第一区二区三区| 中文字幕一区视频| 欧美r级电影在线观看| 91丨porny丨国产| 久久精品国产99国产精品| 亚洲色图制服诱惑| 久久久久99精品一区| 欧美一区二区视频在线观看2022| www.激情成人| 国产一区二区三区四| 午夜欧美电影在线观看| 中文字幕免费不卡在线| 日韩精品一区二区三区在线观看| 色偷偷一区二区三区| 丁香天五香天堂综合| 久久www免费人成看片高清| 亚洲激情五月婷婷| 亚洲国产精品黑人久久久| 欧美成人精品福利| 欧美精品亚洲二区| 在线观看91视频| 国产不卡高清在线观看视频| 久久精品国产99久久6| 日日夜夜免费精品| 一区二区三区在线观看视频| 国产精品国产自产拍高清av王其| 亚洲精品一区二区三区四区高清| 91精品一区二区三区在线观看| 欧美在线观看视频一区二区| 99r精品视频| 国产69精品久久99不卡| 亚洲愉拍自拍另类高清精品| 亚洲精品国产无套在线观| 国产精品福利一区| 国产精品成人在线观看| 国产欧美精品一区二区三区四区| 精品精品欲导航| 欧美丰满少妇xxxxx高潮对白| 欧美群妇大交群中文字幕| 欧美视频一区在线观看| 91视频免费观看| 色视频成人在线观看免| 色综合天天狠狠| 在线视频你懂得一区二区三区| av影院午夜一区| 色先锋资源久久综合| 色呦呦网站一区| 色琪琪一区二区三区亚洲区| 一本色道久久综合狠狠躁的推荐| 欧美亚洲图片小说| 欧美精选一区二区| 日韩欧美一二三四区| 久久色中文字幕| 国产精品久久午夜| 亚洲男人的天堂av| 亚洲国产另类av| 看片的网站亚洲| 国产福利一区二区三区视频在线| 国产精品自拍av| 色综合一区二区三区| 欧美日韩高清在线播放| 精品久久国产老人久久综合| 国产精品美女久久久久高潮| 一区二区三区在线免费观看| 亚洲国产综合视频在线观看| 久久精品国产成人一区二区三区| 国产suv一区二区三区88区| 91一区二区在线| 欧美久久久久久久久| 久久午夜免费电影| 亚洲精品中文在线影院| 日韩精品福利网| eeuss影院一区二区三区| 欧美日韩国产一二三| 久久久久久久久久久黄色| 亚洲美女淫视频| 日韩av一区二| 99久久国产综合精品色伊| 欧美久久婷婷综合色| 国产精品免费丝袜| 图片区小说区区亚洲影院| 国产精品一区专区| 欧美人体做爰大胆视频| 国产欧美1区2区3区| 日韩av不卡在线观看| 99在线精品免费| 精品久久国产字幕高潮| 亚洲一区av在线| 国产盗摄视频一区二区三区| 69p69国产精品| 亚洲国产精品精华液2区45| 亚洲一区二区三区激情| 国产成人自拍网| 在线播放中文字幕一区| 亚洲女厕所小便bbb| 国产精品888| 欧美乱妇23p| 国产精品久久久久影视| 午夜久久久久久久久| 色哦色哦哦色天天综合| 日韩欧美aaaaaa| 欧美探花视频资源| 天天综合天天综合色| 国产在线不卡视频| 亚洲精品一区二区精华| 五月天激情综合| 欧美三级在线视频| 一区二区三区精品视频| 一本色道久久综合亚洲aⅴ蜜桃| 日韩视频在线一区二区| 国产日韩影视精品| 国产精品自在欧美一区| 日韩美女啊v在线免费观看| 91麻豆视频网站| 色综合久久天天| 亚洲欧美色综合| 国产麻豆视频精品| 精品国产乱码久久久久久蜜臀 | 高清不卡一区二区| 欧美一二三四区在线| 亚洲第一狼人社区| 欧美性一区二区| 亚洲国产你懂的| 欧美三区在线观看| 亚洲一区二区精品久久av| 一本大道综合伊人精品热热 | 欧美日韩国产三级| 亚洲一区二区三区四区不卡|