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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? forest.h

?? 使用二叉樹方法來實現(xiàn)一棵樹或者森林
?? H
字號:
#include "iostream.h"
# define N 100
int n=0,w=1;
template<class type>
struct node
{
	type data;
	node <type> *lchild;
	node <type> *rchild;
	int no;
	node()
	{
		rchild=NULL;
		lchild=NULL;
	}
	node(type x,int y)
	{
		rchild=NULL;
		lchild=NULL;
		data=x;
		no=y;
	}
};


template<class type>
class btree
{
	public:
		btree();
		btree(type x);
		~btree();
		bool empty();
		int size();
		node<type>* get_root();
		node<type>* get_lchild(node<type> *t);
		node<type>* get_rchild(node<type> *t);
        void r_size(node<type> *t);
		void clear();
		void r_clear(node<type> *t);
		int height();
		int r_height(node<type> *sub_root);
		void pre_print(node<type> *sub_root,int h);
		void print();
		//void nodecopy(node<type> *sub_root,node<type> *original);
	    //btree(const btree<type>&original);
		void input();
		node<type>* search(node<type> *sub_root,int &z);
		void inorder(type &,void (*visit)(type &));
		void recursive_inorder(node<type> *sub_root,void (*visit)(type &));
		void preorder(void (*visit)(type &));
		void recursive_preorder(node<type> *sub_root,void (*visit)(type &));
		void postorder(void (*visit)(type &));
		void recursive_postorder(node<type> *sub_root,void (*visit)(type &));

	protected:
		node<type> *root;
};


//以下是函數(shù)的實現(xiàn)算法:
template<class type>
btree<type>::btree()                             //構(gòu)造函數(shù)1
{
	root=NULL;
}

template<class type>                             //構(gòu)造函數(shù)2
btree<type>::btree(type x)
{
	root=new node<type>(x);
	root->no=1;
	root->rchild=NULL;
	root->lchild=NULL;
}


template<class type>                             //析構(gòu)函數(shù)
btree<type>::~btree()
{
	r_clear(root);
}


template<class type>                                //判斷二叉樹是否為空
bool btree<type>::empty()
{
	return (root==NULL);
}


template<class type>                               //返回二叉樹的根結(jié)點
node<type>* btree<type>::get_root()
{
	return root;
}

template<class type>                               //返回結(jié)點t的左孩子結(jié)點
node<type>* btree<type>::get_lchild(node<type> *t)
{
	return t->lchild;
}


template<class type>                               //返回結(jié)點t的左孩子結(jié)點
node<type>* btree<type>::get_rchild(node<type> *t)
{
	return t->rchild;
}


template<class type>                               //打印二叉樹的所有結(jié)點
void btree<type>::print()
{  
	if(root!=NULL)
		pre_print(root,1);
	else
		cout<<"The tree is empty!"<<endl;;
}
template<class type>                            
void btree<type>::pre_print(node<type> *sub_root,int h)
{   
	if(sub_root!=NULL)
	{
		cout<<" "<<sub_root->no<<"->"<<sub_root->data<<"->"<<h<<" ";
		pre_print(sub_root->lchild,h+1);
		pre_print(sub_root->rchild,h+1);
	}
}


template<class type>                                 //求二叉樹的高度
int btree<type>::height()
{
	return r_height(root);
}
template<class type>                          
int btree<type>::r_height(node<type> *sub_root)
{
	node<type> *temp=sub_root;
	if(temp==NULL)
		return 0;
	else
	{
		 int hl=0,hr=0;
		 hl=r_height(temp->lchild);
		 hr=r_height(temp->rchild);
		 return hl>hr? hl+1:hr+1;	 
	}
}

template<class type>                                   //求樹的結(jié)點數(shù)目
int btree<type>::size()
{
	r_size(root);
	return n;
}
template<class type>                         
void btree<type>::r_size(node<type> *t)
{
	if(t==NULL)
		return ;
	else
	{
		n++;
		r_size(t->lchild);
		r_size(t->rchild);
	}
}

template<class type>                                     //把樹清空
void btree<type>::clear()
{   if(root!=NULL)

	r_clear(root);
else 
   cout<<"clear"<<endl;
root=NULL;
}
template<class type>
void btree<type>::r_clear(node<type> *t)              
{   
	if(t!=NULL)
	{   node<type> *tmp=t;
		//delete t;
		r_clear(t->lchild);
		r_clear(t->rchild);
		delete tmp;
	}//delete t;
	else
		return;
}
/*
template<class type>                                    //用一棵數(shù)初始化新樹
btree<type>::btree(const btree<type> &original)
{
	root=new node<type>;//(original.root->data);
	root->data=original.root->data;

	node<type> *t=root;
	/*while(t!=NULL)
	{
		t=t->lchild;
		t->lchild=original.t->lchild;
		t->rchild=original.t->rchild;
		t=t->rchild;
		t->lchild=original.t->lchild;
		t->rchild=original.t->rchild;
	}
}*/

template<class type>                                      //利用后序遍歷查找結(jié)點,用于初始化
node<type>* btree<type>::search(node<type> *sub_root,int &z)      
{   
	node<type> *temp=NULL;
	if(sub_root!=NULL)
	{    
		temp=search(sub_root->lchild,z); 
		if(temp==NULL)
			temp=search(sub_root->rchild,z);
		if(temp==NULL)
		{
     	    if(sub_root->no==z)
		    temp=sub_root;
		}
	}
	return temp;
}
	    

template<class type>                                       //二叉樹的初始化
void btree<type>::input()
{   

	int a[N]={0},s,h,j;
	type b[N],r;
	cout<<"輸入二叉樹的結(jié)點個數(shù):"<<endl;
	cin>>h;
	if(h==0)   return;
	cout<<"請輸入與完全二叉樹相對應(yīng)的序號以及樹的權(quán)值:"<<endl;
	for(int i=0;i<h;i++)
	{
		cin>>s; a[i]=s;
		cin>>r; b[i]=r;
	}
	if(a[0]!=1)
	{
		cout<<"Error"<<endl;
		return;
	}
	node<type> *p=new node<type>(b[0],1);
	root=p;   i=1;
	node<type> *t=NULL;
	while(a[i]!=0)
	{
		for(j=0;j<h;j++)
		{
			if(a[i]==2*a[j]||a[i]==2*a[j]+1)          
				break;
		}
		if(j==h)
		{
			cout<<"Input error"<<endl;
			return;
		}
        else
		{
			if(a[i]==2*a[j]) 
			{
				node<type> *p=new node<type>(b[i],a[i]);
				t=search(root,a[j]);
				if(t==NULL)
					return;
				t->lchild=p;
				t=NULL;
			}
			if(a[i]==2*a[j]+1)
			{
				node<type> *p=new node<type>(b[i],a[i]);
				t=search(root,a[j]);
				if(t==NULL)					
					return;
				t->rchild=p;
				t=NULL;	
			}
		}
		i++;
	}
}

        
                                                              //以下為二叉樹的三種遍歷,利用函數(shù)指針的方法

template <class type>
void btree<type>::inorder(type &,void (*visit)(type &))
{
   recursive_inorder(root, visit);
}


template <class type>
void btree<type>::recursive_inorder(node<type> *sub_root,void (*visit)(type &))
{
   if (sub_root != NULL) {
      recursive_inorder(sub_root->lchild, visit);
      (*visit)(sub_root->data);
      recursive_inorder(sub_root->rchild, visit);
   }
}


template <class type>
void btree<type>::preorder(void (*visit)(type &))
{
   recursive_preorder(root, visit);
}


template <class type>
void btree<type>::recursive_preorder(node<type> *sub_root,void (*visit)(type &))
{
   if (sub_root != NULL) {
      (*visit)(sub_root->data);
      recursive_preorder(sub_root->lchild, visit);
      recursive_preorder(sub_root->rchild, visit);
   }
}


template <class type>
void btree<type>::postorder(void (*visit)(type &))
{
   recursive_postorder(root, visit);
}


template <class type>
void btree<type>::recursive_postorder(node<type> *sub_root,void (*visit)(type &))
{
   if (sub_root != NULL) {
      recursive_postorder(sub_root->lchild, visit);
      recursive_postorder(sub_root->rchild, visit);
      (*visit)(sub_root->data);
   }
}






//派生一個森林類
template<class type>
class forest:public btree<type>
{
	public:
		void fs_print();
		void r_fs_print(node<type> *sub_root);
};


template<class type>                                      //輸出用二叉鏈表表示的森林的所有的父子對。
void forest<type>::fs_print()
{
	r_fs_print(root);
}
template<class type>
void forest<type>::r_fs_print(node<type> *sub_root)
{
	node<type> *r=sub_root->rchild,*l=sub_root->lchild;
	if(sub_root!=NULL&&sub_root->lchild!=NULL)
	{
		cout<<sub_root->data<<"<-->"<<l->data<<"  ";
		while(l!=NULL&&l->rchild!=NULL)
		{
			cout<<sub_root->data<<"<-->"<<l->rchild->data<<"  ";
			l=l->rchild;
		}
	}
	if(sub_root->lchild!=NULL)
		r_fs_print(sub_root->lchild);
	if(sub_root->rchild!=NULL)
		r_fs_print(sub_root->rchild);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
51精品秘密在线观看| 亚洲欧美国产77777| 日韩欧美成人一区| 欧美精品vⅰdeose4hd| 欧美在线观看视频一区二区| 91久久奴性调教| 在线精品视频一区二区| 精品美女被调教视频大全网站| 欧美美女激情18p| 日韩视频在线你懂得| 欧美一级久久久| 久久蜜桃av一区二区天堂| 国产欧美在线观看一区| 国产精品国产三级国产aⅴ中文| 国产精品国产三级国产| 亚洲激情六月丁香| 亚洲高清免费视频| 免费看欧美美女黄的网站| 久久精品国产久精国产| 国产一区二区美女| 97国产精品videossex| 欧美色综合网站| 日韩三级视频在线看| 国产午夜精品美女毛片视频| 国产精品乱码久久久久久| 亚洲色图视频网站| 日韩av在线发布| 久99久精品视频免费观看| 成人黄色在线网站| 欧美在线看片a免费观看| 欧美一区二区三区色| 久久精品在线免费观看| 中文字幕永久在线不卡| 亚洲成人你懂的| 国内精品视频666| 成人免费毛片aaaaa**| 在线观看www91| 欧美精品一区二区在线观看| 1区2区3区欧美| 日韩二区在线观看| av一区二区三区黑人| 91精品国产入口在线| 国产色一区二区| 亚洲观看高清完整版在线观看 | 不卡高清视频专区| 欧美亚洲动漫精品| 久久久三级国产网站| 亚洲国产精品影院| 国产成人av网站| 欧美高清dvd| 国产精品久久久99| 免费在线观看一区| 91麻豆文化传媒在线观看| 亚洲一区二区五区| 综合久久给合久久狠狠狠97色| 亚洲18色成人| av一区二区久久| 精品国产乱码久久久久久久久 | 日一区二区三区| 国产一区二区不卡老阿姨| 在线国产亚洲欧美| 久久精品视频一区二区三区| 五月激情综合婷婷| 99久久久久久99| 国产亚洲女人久久久久毛片| 午夜精品爽啪视频| 91在线你懂得| 久久久激情视频| 免费不卡在线观看| 欧美在线一二三| 国产精品久久久久久亚洲伦| 精品一区二区av| 欧美精品色综合| 日韩久久一区二区| 国产成a人亚洲精| 欧美第一区第二区| 首页综合国产亚洲丝袜| 色欧美88888久久久久久影院| 国产视频一区二区在线观看| 麻豆国产欧美一区二区三区| 国产不卡在线视频| 在线免费观看一区| 中文字幕精品三区| 国产一区二区三区日韩| 日韩欧美成人一区| 日本欧洲一区二区| 91麻豆精品国产自产在线 | 91免费在线播放| 欧美国产亚洲另类动漫| 国产精品亚洲一区二区三区妖精| 欧美一区二区精品久久911| 亚洲亚洲精品在线观看| 91日韩精品一区| 国产精品国产a级| 成人永久看片免费视频天堂| 国产午夜亚洲精品不卡| 国产精品一区一区| 国产三级久久久| 高潮精品一区videoshd| 精品国产免费一区二区三区四区 | 日韩在线a电影| 欧美精品1区2区3区| 亚洲va欧美va天堂v国产综合| 欧美视频一区二区三区在线观看| 亚洲欧美偷拍卡通变态| 91免费看片在线观看| 亚洲欧美激情在线| 欧美在线一二三四区| 丝袜美腿亚洲一区| 日韩精品一区二区三区在线| 久久99国产精品尤物| 亚洲精品在线免费观看视频| 亚洲第一成人在线| 亚洲国产另类精品专区| 欧美亚洲精品一区| 亚洲第一二三四区| 6080yy午夜一二三区久久| 日韩国产在线观看一区| 欧美成人激情免费网| 国产精品888| 国产精品超碰97尤物18| 91黄色免费观看| 日韩二区三区在线观看| 26uuu国产日韩综合| 成人永久免费视频| 亚洲一区视频在线| 日韩一区二区视频| 国产麻豆欧美日韩一区| 亚洲欧洲精品天堂一级| 欧美精品一区二区三区在线 | 欧美日韩精品电影| 麻豆一区二区在线| 欧美国产一区在线| 欧美视频在线一区| 国内不卡的二区三区中文字幕| 日本一区二区久久| 欧美午夜精品久久久| 久久丁香综合五月国产三级网站| 久久精品视频在线看| 色婷婷av一区二区三区大白胸| 日本在线观看不卡视频| 久久精品一二三| 一区免费观看视频| 国产精品久久久久aaaa| 在线视频国内自拍亚洲视频| 午夜欧美在线一二页| 国产欧美日韩一区二区三区在线观看| 99国产一区二区三精品乱码| 五月婷婷色综合| 国产欧美日韩中文久久| 欧美色图在线观看| 激情综合色综合久久| 亚洲色图视频网| 日韩欧美一二三区| 色婷婷亚洲一区二区三区| 久久er99热精品一区二区| 自拍偷拍亚洲综合| 精品免费国产二区三区| 91美女蜜桃在线| 国产精品一卡二卡| 午夜国产精品一区| 国产精品电影一区二区| 3d动漫精品啪啪1区2区免费| 99视频热这里只有精品免费| 麻豆精品一区二区综合av| 亚洲欧洲在线观看av| 精品日产卡一卡二卡麻豆| 色天天综合色天天久久| 国产mv日韩mv欧美| 青娱乐精品视频在线| 亚洲愉拍自拍另类高清精品| 亚洲国产精品精华液2区45| 欧美一二三区精品| 欧美日韩一级黄| 91蜜桃网址入口| 国产精品毛片a∨一区二区三区| voyeur盗摄精品| 激情综合色综合久久| 一区二区欧美精品| 国产精品欧美久久久久一区二区 | 亚洲欧美激情一区二区| 国产日韩欧美精品在线| 欧美不卡视频一区| 欧美人伦禁忌dvd放荡欲情| 91色视频在线| 99久久久久久| 国产91精品久久久久久久网曝门 | 欧美日本一区二区三区| 91麻豆自制传媒国产之光| gogo大胆日本视频一区| 国产成人精品亚洲午夜麻豆| 久久成人精品无人区| 视频一区欧美日韩| 午夜欧美一区二区三区在线播放| 亚洲激情第一区| 一区二区三区精密机械公司| 亚洲欧美激情一区二区| 亚洲精品视频在线观看网站| 18欧美亚洲精品| 亚洲色图清纯唯美|