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

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

?? 二叉樹建立與遍歷.cpp

?? 二叉樹建立與遍歷源代碼
?? CPP
字號:
//程序用法:本程序二叉樹的構造過程采用廣義表作為輸入,預先把節點信息以廣義表字符串形式存儲在文本
//文件中,程序運行首先從文件中讀出節點信息構造二叉樹。
//注意:文件中每一個字母代表一個節點元素值;
//      每個根結點作為由子樹構成的表的名字放在前面;
//      每個結點的左孩子與右孩子用逗號隔開,若只有右孩子而無左孩子,逗號不能省略;
//      整個廣義表以@作為結尾!!!,切記。
#include<iostream>
#include<fstream>
#include<limits>
#include<queue>//為了避免代碼過于冗余,在此不自定義隊列類,使用系統容器代替。
#include<stack>//同上
using namespace std;

char read(char *A)//從字符數組讀取字符
{
	static count=0;
	return A[count++];
}

//樹結點類:
class BinaryTree;
class BinTreeNode{
friend class BinaryTree;
private:
	BinTreeNode *leftChild,*rightChild;//左右孩子指針
	char data;//節點元素
public:
	BinTreeNode():leftChild(NULL),rightChild(NULL){}
	BinTreeNode(char d,BinTreeNode *lp=NULL,
		BinTreeNode *rp=NULL):data(d),leftChild(lp),rightChild(rp){}
	char GetData()//獲取節點元素
	{
		return data;
	}
	BinTreeNode *GetLeftChild()//取得左孩子指針
	{
		return leftChild;
	}
	BinTreeNode *GetRightChild()//取得右孩子指針
	{
		return rightChild;
	}
	void SetData(char d)//設置節點元素值
	{
		data=d;
	}
	void SetLeftChild(BinTreeNode *p)//設置左孩子指針
	{
		leftChild=p;
	}
	void SetRightChild(BinTreeNode *p)//設置右孩子指針
	{
		rightChild=p;
	}
};

//二叉樹鏈表類
class BinaryTree{
private:
	BinTreeNode *root;//根結點
	void destroy(BinTreeNode *p);//銷毀結點P
	void PreOrderTravers(BinTreeNode *r);//前序遍歷
	void InOrderTravers(BinTreeNode *r);//中序遍歷
	void PostOrderTravers(BinTreeNode *r);//后序遍歷
	int length(BinTreeNode *n);//求樹的深度
public:
	BinaryTree():root(NULL){}
	BinaryTree(char d)
	{
		root=new BinTreeNode(d);
	}
	virtual~BinaryTree()
	{
		destroy(root);
	}
    bool IsEmpty(){return root==NULL? true:false;}//判斷樹非空
    void build(char *A);//建立二叉樹
	int length(){return length(root);};//求樹的深度接口
    void PreOrderTravers()//前序遍歷接口
	{
		PreOrderTravers(root);
	}
	void InOrderTravers()//中序遍歷接口
	{
		InOrderTravers(root);
	}
	void PostOrderTravers()//后序遍歷接口
	{
		PostOrderTravers(root);
	}
	void LevelOrderTravers();//層次遍歷
};
//成員函數實現
void BinaryTree::build(char *A)//建立二叉樹,由廣義表輸入
{
	stack<BinTreeNode*> t;
	BinTreeNode *p;
	int flag;
    do
	{
		char ch=read(A);
		switch(ch)
		{
		case '@':return;
		case '(':{t.push(p);flag=1;}break;
		case ')':t.pop();break;
		case ',':flag=2;break;
		default:{
			        p=new BinTreeNode(ch);
                    if(root==NULL)
					{
						root=p;
					}
					else
					{
						if(flag==1)
						{
							t.top()->SetLeftChild(p);
						}
						else
						{
							t.top()->SetRightChild(p);
						}
					}
				}
			break;
		}
	}while(true);
}
int BinaryTree::length(BinTreeNode *n)//求樹深度
{
	if(n==NULL)
	{
		return 0;
	}
	else
	{
		int lclen=length(n->GetLeftChild());
		int rclen=length(n->GetRightChild());
		if(lclen<rclen)
			return rclen+1;
		else
			return lclen+1;
	}
}
void BinaryTree::destroy(BinTreeNode *p)//銷毀二叉樹
{
	if(p!=NULL)
	{
		destroy(p->GetLeftChild());
		destroy(p->GetRightChild());
		delete p;
	}
}
//前序遍歷
void BinaryTree::PreOrderTravers(BinTreeNode *r)
{
	if(r!=NULL)
	{
		cout<<r->GetData()<<" ";
		PreOrderTravers(r->GetLeftChild());
		PreOrderTravers(r->GetRightChild());
	}
}
//中序遍歷
void BinaryTree::InOrderTravers(BinTreeNode *r)
{
	if(r!=NULL)
	{
		InOrderTravers(r->GetLeftChild());
		cout<<r->GetData()<<" ";
		InOrderTravers(r->GetRightChild());
	}
}
//后序遍歷
void BinaryTree::PostOrderTravers(BinTreeNode *r)
{
	if(r!=NULL)
	{
		PostOrderTravers(r->GetLeftChild());
		PostOrderTravers(r->GetRightChild());
		cout<<r->GetData()<<" ";}
}
//層次遍歷
void BinaryTree::LevelOrderTravers()
{
	queue<BinTreeNode*> q;
	BinTreeNode *p=root;
	if(p)
		q.push(p);
	while(!q.empty())
	{
		p=q.front();
		cout<<p->GetData()<<" ";
		if(p->GetLeftChild())
			q.push(p->GetLeftChild());
		if(p->GetRightChild())
			q.push(p->GetRightChild());
		q.pop();
	}
}

void Reset()//輸入異常處理函數
{
	cout<<"輸入非數字字符,請重輸:\n";
	cout<<std::flush;
    std::cin.clear();
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n' );
}
//主函數
void main()
{
	BinaryTree BTree;
	char *A=new char[30];
	ifstream file("node.txt",ios::in);
	if(!file)
	{
		cout<<"節點文件打開失敗,請先配置好二叉樹的節點文件!";
		return;
	}
	file.getline(A,30);
	file.close(); 
	BTree.build(A);
	cout<<"二叉樹構造完畢!"<<endl;
	do
	{
		cout<<endl;
		cout<<"\t\t\t****請選擇操作****\n";
        cout<<"\t\t\t****1.先根遍歷****\n";
	    cout<<"\t\t\t****2.中根遍歷****\n";
        cout<<"\t\t\t****3.后根遍歷****\n";
        cout<<"\t\t\t****4.層次遍歷****\n";
     	cout<<"\t\t\t****5.樹的深度****\n";
    	cout<<"\t\t\t****6.退出模擬****\n";
    	cout<<"請選擇:";
	    int s;//選擇
		while(!(cin>>s))
			 Reset();
	    switch(s)
		{
     	case 1:cout<<endl<<"先根遍歷結果:"<<endl;BTree.PreOrderTravers();break;
	    case 2:cout<<endl<<"中根遍歷結果:"<<endl;BTree.InOrderTravers();break;
	    case 3:cout<<endl<<"后根遍歷結果:"<<endl;BTree.PostOrderTravers();break;
        case 4:cout<<endl<<"層次遍歷結果:"<<endl;BTree.LevelOrderTravers();break;
		case 5:cout<<endl<<"該二叉樹的深度為:";cout<<BTree.length();break;
		case 6:return;
     	default:cout<<"請正確選擇!\n";break;
		}
	}while(true);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青娱乐精品视频在线| 国精产品一区一区三区mba桃花| 天天操天天综合网| 成人一区二区三区中文字幕| 欧美日韩国产经典色站一区二区三区| 久久久影视传媒| 日本中文字幕一区| 91在线高清观看| 久久久www成人免费无遮挡大片| 一区二区不卡在线播放| 成人性色生活片免费看爆迷你毛片| 欧美日韩三级视频| 综合久久给合久久狠狠狠97色| 开心九九激情九九欧美日韩精美视频电影 | 亚洲欧美另类小说| 欧美精品一区二区不卡| 亚洲国产日韩一区二区| 成人激情av网| 国产午夜精品久久久久久久 | 精品午夜久久福利影院| 国产精品免费观看视频| 蜜乳av一区二区| 欧美三级视频在线| 亚洲一区二区三区国产| 色婷婷综合视频在线观看| 国产日韩影视精品| 国产一区二区h| 精品美女在线播放| 九一九一国产精品| 欧美岛国在线观看| 国产在线精品免费av| 日韩免费福利电影在线观看| 奇米色一区二区| 日韩一区二区影院| 九九在线精品视频| 欧美精品一区二区三区蜜桃| 国产美女在线精品| 国产女人18水真多18精品一级做| 国产在线乱码一区二区三区| 91精品国产一区二区三区| 国产精品每日更新在线播放网址| 国产电影一区在线| 中文字幕亚洲精品在线观看| av亚洲精华国产精华| 亚洲另类春色国产| 91精品国产综合久久蜜臀| 亚洲国产欧美另类丝袜| 欧美二区在线观看| 另类调教123区| 国产欧美精品一区二区色综合朱莉| 高潮精品一区videoshd| 综合久久久久综合| 欧美性色黄大片| 日韩1区2区3区| 久久综合久色欧美综合狠狠| 亚洲永久免费av| 日韩欧美自拍偷拍| 丰满少妇久久久久久久| 一区二区三区在线观看欧美| 在线观看亚洲一区| 精品一区二区三区免费观看| 国产精品全国免费观看高清| 欧美伊人精品成人久久综合97| 日韩—二三区免费观看av| 国产喂奶挤奶一区二区三区| 色老汉一区二区三区| 久热成人在线视频| 亚洲欧美电影一区二区| 日韩久久免费av| aaa国产一区| 精品一区二区三区免费观看 | 久久久精品国产免大香伊| 91同城在线观看| 麻豆精品在线观看| 亚洲精品成人少妇| 久久久高清一区二区三区| 欧美私模裸体表演在线观看| 国产精品一色哟哟哟| 亚洲激情在线播放| 精品三级av在线| 欧美主播一区二区三区| 国产精品18久久久久久vr| 午夜精品久久久久久| 亚洲国产成人私人影院tom| 538在线一区二区精品国产| 日本不卡一区二区三区高清视频| 国产精品久久久久久久浪潮网站 | 午夜影院久久久| 亚洲免费观看在线视频| 免费成人在线观看视频| 中文字幕一区二区不卡 | 91精品国产综合久久久久| 成人激情图片网| 裸体健美xxxx欧美裸体表演| 亚洲一区二区不卡免费| 一区在线中文字幕| 久久一区二区视频| 日韩欧美不卡在线观看视频| 在线观看一区二区精品视频| 99在线热播精品免费| 国产超碰在线一区| 国产精品一区在线观看乱码| 奇米影视一区二区三区| 亚洲电影在线播放| 亚洲一卡二卡三卡四卡无卡久久| 国产精品久久久久久久午夜片| 精品国产一区二区三区av性色| 欧美另类一区二区三区| 欧美在线一区二区| 在线观看一区日韩| 在线观看日韩av先锋影音电影院| 99国产精品国产精品久久| 成人性生交大合| 91在线一区二区| 日本黄色一区二区| 91久久人澡人人添人人爽欧美| 91免费观看视频| 日本精品一区二区三区高清| 91老师片黄在线观看| 91麻豆国产香蕉久久精品| 99精品国产视频| 在线观看av不卡| 欧美日韩精品专区| 日韩亚洲欧美高清| 精品久久久久久亚洲综合网| 欧美va亚洲va香蕉在线| 久久色视频免费观看| 国产精品美女一区二区| 亚洲欧美日韩电影| 亚洲国产一区二区视频| 老司机一区二区| 国产91丝袜在线播放九色| 成人h版在线观看| 在线观看免费视频综合| 日韩一区二区三区电影在线观看 | 中文字幕一区二区三区色视频 | 91黄色免费版| 欧美日韩国产精选| 久久综合色天天久久综合图片| 中文字幕不卡三区| 一区二区成人在线视频 | 肉丝袜脚交视频一区二区| 久久精品国产秦先生| 成人美女视频在线看| 在线看日韩精品电影| 欧美成人女星排行榜| 成人欧美一区二区三区在线播放| 一级精品视频在线观看宜春院 | 91国产成人在线| 欧美日韩一区二区不卡| 日韩精品专区在线影院观看| 中文子幕无线码一区tr| 婷婷国产在线综合| 欧美日韩国产中文| 韩国一区二区在线观看| 91麻豆免费观看| 欧美成人vr18sexvr| 亚洲精品一二三| 国产一区二区三区| 91搞黄在线观看| 久久精品人人爽人人爽| 亚洲成av人片在www色猫咪| 国产成人在线影院| 在线电影院国产精品| 国产精品久久久久久久岛一牛影视 | 久久99精品国产.久久久久久| 成人免费看片app下载| 91国在线观看| 中文字幕乱码久久午夜不卡| 日韩不卡一二三区| 成人小视频免费在线观看| 日韩免费成人网| 亚洲地区一二三色| 99re这里都是精品| 26uuu精品一区二区在线观看| 一区二区三区中文字幕电影| 国产盗摄精品一区二区三区在线 | 欧美变态口味重另类| 亚洲精选视频在线| 国产精品一区二区91| 日韩一二在线观看| 五月天亚洲婷婷| 日本乱人伦aⅴ精品| **欧美大码日韩| 国产.欧美.日韩| 久久九九久久九九| 久久精品免费看| 日韩欧美一级片| 日韩高清一区二区| 3d成人h动漫网站入口| 亚洲欧美日本韩国| 91猫先生在线| 一区二区三区免费在线观看| 99re热视频精品| 国产日本欧美一区二区| 国产美女精品人人做人人爽| 欧美v日韩v国产v| 久久国产三级精品| 精品日韩成人av| 国产伦精品一区二区三区视频青涩|