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

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

?? bstree.h

?? 二叉排序樹的幾種操作 包括:建立二叉排序樹
?? H
字號:
#include<iostream.h>
#include<stdlib.h>

typedef struct BSTreeNode
{
	int data;
	struct BSTreeNode *leftChild;
	struct BSTreeNode *rightChild;
}BSTreeNode;

class BSTree
{
	public:
		BSTree(void);
		void Display(void);//顯示這個樹
		void Insert(int data);//在樹中插入一個值
		Delete(int data);//在樹中刪除一個值
		BSTreeNode* Find(int data);//在樹中查找一個值
		~BSTree();
	private:
		BSTreeNode* buildTree(BSTreeNode* head,int number);//建立一個樹
		BSTreeNode* search(BSTreeNode* head ,int data);//查找
		BSTreeNode* BSTree::searchParent(BSTreeNode* head,BSTreeNode* p);//查找出p的父親節點的指針
		BSTreeNode* BSTree::searchMinRight(BSTreeNode* head);//找到右子樹中最小的節點
		void showTree(BSTreeNode* head);//顯示
		void destroyTree(BSTreeNode* head);//刪除
		BSTreeNode *head;
};

//建立一個二叉排序樹
BSTree::BSTree()
{
   cout<<"Build the BSTree  (end with -1): "<<endl;
   head=NULL;
   int number;
   cin>>number;
   while(number!=-1)
   {
		head=buildTree(head,number);
		cin>>number;  
   }
}

//建立
BSTreeNode* BSTree::buildTree(BSTreeNode* head,int number)
{
	BSTreeNode *p;    
	p=new BSTreeNode;
    p->data=number;
	p->leftChild=p->rightChild=NULL;
	if(head==NULL)
	{
		return p;
	}
	else
	{
       if(p->data<head->data)
		   head->leftChild=buildTree(head->leftChild,number);
	   else
		   head->rightChild=buildTree(head->rightChild,number);
	   return head;
	}
}

//插入一個結點
void BSTree::Insert(int data)
{
	head=buildTree(head,data);
}

//查找一個結點
BSTreeNode* BSTree::Find(int data)
{
	return search(head,data);
}

BSTreeNode* BSTree::search(BSTreeNode* head ,int data)
{  
	if(head==NULL)
		return NULL;
	if(head->data==data)
		return head;
	else 
	{
		if(data<head->data)
			return search(head->leftChild,data);
		else
			return search(head->rightChild,data);
	}
}

//刪除一個結點
BSTree::Delete(int data)
{
	BSTreeNode *p;
	p=NULL;
    p=search(head,data);
	if(p==NULL)
	{
		cout<<"Not find."<<endl;
	}
	else
	{
    if(p==head)
	{
		head=NULL;
	}
	else
	{ 
		BSTreeNode* parent;
		parent=searchParent(head,p);
		if(p->leftChild==NULL&&p->rightChild==NULL)//葉子節點
		{
			if(parent->leftChild==p)
			{
				parent->leftChild=NULL;
			}
			else
			{
				parent->rightChild=NULL;

			}
		}
        else//非葉子節點
		{
           if(p->rightChild==NULL)//該節點沒有右孩子
			{
				if(parent->leftChild==p)
				{
					parent->leftChild=p->leftChild;
				}
				 else
				{
					 parent->rightChild=p->leftChild;
				}
			}
			else//該點有左右孩子
			{
				BSTreeNode *rightMinSon,* secondParent;//secondParent為右子樹中的最小節點的父親
				rightMinSon=searchMinRight(p->rightChild);
				secondParent=searchParent(p->rightChild,rightMinSon);
				secondParent->leftChild=rightMinSon->rightChild;
				if(p->rightChild==rightMinSon)//右子樹中的最小節點的父親為p
				{
					p->rightChild=rightMinSon->rightChild;
				}
				p->data=rightMinSon->data;
			} 
		}
	}
	}
}

BSTreeNode* BSTree::searchParent(BSTreeNode* head,BSTreeNode* p)
{
	if(head->leftChild==p||head->rightChild==p||head==p||head==NULL)
		return head;
    else
	{
		if(p->data<head->data)
			return searchParent(head->leftChild,p);
		else
			return searchParent(head->rightChild,p);
	}
}

BSTreeNode* BSTree::searchMinRight(BSTreeNode* head)//找到右子樹中最小的節點
{
	if(head->leftChild==NULL||head==NULL)
	{
		return head;
	}
	else
	{
		return searchMinRight(head->leftChild);
	}
}

//顯示二叉排序樹
void BSTree::Display(void)
{
	showTree(head);
	cout<<endl;
}

void BSTree::showTree(BSTreeNode* head)
{
	if(head!=NULL)
	{
		showTree(head->leftChild);
		cout<<head->data<<' ';
		showTree(head->rightChild);
	}
}

//刪除整棵二叉排序樹
BSTree::~BSTree()
{
	cout<<"Deleted the Whole Tree!"<<endl;
	destroyTree(head);
}

void BSTree::destroyTree(BSTreeNode* head)
{
	if(head!=NULL)
	{
		destroyTree(head->leftChild);
		destroyTree(head->rightChild);
		delete head;
	}

}

//showmessage
void print()
{
	cout<<endl
	<<"1.Display "
    <<"2.Insert "
	<<"3.Find "
	<<"4.Delete"<<endl;
}

/*
template<class Type> class BSBSTreeNode<Type>::public BinBSTreeNode<Type>{
//二叉排序樹結點類的定義
	friend class BSTree<Type>;
	public:
		BSBSTreeNode():leftChild(NULL),rightChild(NULL){}//構造函數
		BSBSTreeNode(const Type d):data(d),leftChild(NULL),rightChild(NULL){}
		//構造函數
		~BSBSTreeNode(){}
		void displayTree(void)
        void showTree(BinBSTreeNode* head);
	protected:
		Type data;
		BSBSTreeNode<Type>* leftChild,* rightChild;
};

template<class Type> class BSTree<Type>::public BinaryTree<Type>
{
	public:
		BSTree()(void);//構造函數
		~BSTree();//析構函數
		BSBSTreeNode<Type>* Find(const Type &k) const
			{return Find(k,root);}//查找
		Type Min();
		Type Max();
		void Insert(const Type &x)
			{Insert(x,root);}
		void Delete(const Type &k)
			{Delete(k,root);}
	private:
		BSBSTreeNode<Type>* root;
		BSBSTreeNode<Type>* Find(const Type &k,BSBSTreeNode<Type>* p)const;
		void Insert(const Type &x,BSBSTreeNode<Type>* &p);
		void Delete(const Type &k,BSBSTreeNode<Type>* &p);
		BSBSTreeNode<Type>* head;
}*/

/*template<class Type>BSBSTreeNode<Type>*BSTree<Type>::          //遞歸
Find(const Type &k,BSBSTreeNode<Type>*p)const{
	if(p==NULL)
		return NULL;
	else if(k<p->data)
		return Find(k,p->leftChild);
	   else if(k>p->data)
		   return Find(k,p->rightChild);
	      else return p;
}

template<class Type>					非遞歸
BSBSTreeNode<Type> * BSTree<Type>::
Find(const Type &k,BSBSTreeNode<Type>*p)const{
	BSBSTreeNode<Type>* temp=p;
	if(p!=NULL){
		while(temp!=NULL){
			if(temp->data==k)return temp;
			if(temp->data<k)
				temp=temp->rightChild;
			else temp=temp->leftChild;}
	}
		return temp;
}

template<class Type> void<Type>BSTree<Type>::
Insert(const Type &k,BSBSTreeNode<Type>* &p){
	if(p==NULL) 
		p=new BSBSTreeNode<Type>(k);
	else if(k<p->data)
		 Insert(k,p->leftChild);
	else if(k>p->data)
		 Insert(k,p->rightChild);
	else
	{
		cout<<"There has node k"<<end;
		exit(1);
	}
}

template<class Type> void<Type> BSTree<Type>::
Delete(const Type &k,BSBSTreeNode<Type>* &p){
	BSBSTreeNode<Type>* temp;
	if(p!=NULL)
	   if(k<p->data)
		 Delete(k,p->leftChild);
	else if(k>p->data)
		 Delete(k,p->rightChild);
	else if(p->leftChild!=NULL&&p->rightChild!=NULL)
	{
		temp=Min(p->rightChild);
		p->data=temp->data;
		Delete(p->data,temp);
	}
	else
	{
		temp=p;
	    if(p->leftChild==NULL)
			p=p->rightChild;
		else
			p=p->leftChild;
		delete temp;
	}
}

template<class Type>
void<Type>BSTree<Type>::displayTree(void)
{

showTree(Head);
cout<<endl;
}
template<class Type>
void<Type> BSTree<Type>::showTree(BSBSTreeNode* Head)
{

if(Head!=NULL)
{
showTree(Head->left ) ;

    cout<<Head->key<<' ' ;

showTree(Head->right) ;

}

template<class Type>
Type<Type>BSTree<Type>::
Min(BSBSTreeNode<Type>*& p){
	if(p->leftChild!=NULL)
		p=p->leftChild;
	return p->data;
}
template<class Type>
Type<Type>BSTree<Type>::
Max(BSBSTreeNode<Type>*& p){
	if(p->rightChild!=NULL)
		p=p->rightChild;
	return p->data;
}
*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩美一区二区三区| 欧美日韩视频在线一区二区| 亚洲成在线观看| 亚洲视频一区二区在线| 国产精品免费丝袜| 国产精品水嫩水嫩| 国产精品你懂的| 国产精品乱码人人做人人爱| 国产精品久久久久久久岛一牛影视| 欧美午夜精品电影| av一区二区三区黑人| 99精品偷自拍| 在线观看亚洲专区| 欧美日韩国产一区| 欧美一区二区精品在线| 欧美亚洲动漫制服丝袜| 91精品一区二区三区在线观看| 蜜臀av一区二区在线免费观看| 777奇米成人网| 7777精品久久久大香线蕉 | 亚洲第一激情av| 一区二区三区.www| 日韩av二区在线播放| 久久国产夜色精品鲁鲁99| 国产一二三精品| 一本一道综合狠狠老| 国产区在线观看成人精品| 久久精品这里都是精品| 最新国产成人在线观看| 日精品一区二区三区| 国产精品一区二区久久不卡| 国产一区二区影院| 91日韩精品一区| 欧美一区二区国产| 国产精品不卡一区| 日韩电影在线免费观看| 国产精品自拍av| 欧美日韩综合色| 国产亚洲欧美激情| 午夜精品久久久久久久99水蜜桃| 精品国产123| 亚洲精品国产a| 国产在线乱码一区二区三区| 欧美性受xxxx黑人xyx| 精品国产乱码久久久久久闺蜜 | 夜夜嗨av一区二区三区中文字幕 | 久久久久久久久97黄色工厂| 中文字幕亚洲电影| 美女网站色91| 日本精品视频一区二区| 国产午夜精品久久| 日本伊人精品一区二区三区观看方式| 国产精品久久久久影院老司 | 欧美日本在线看| 欧美激情一区二区三区在线| 亚洲第一二三四区| 色综合亚洲欧洲| 久久久久久久久久久久电影 | 日韩女优av电影| 亚洲精品成a人| 岛国精品在线观看| 精品日韩av一区二区| 粉嫩av亚洲一区二区图片| 欧美男生操女生| 亚洲裸体xxx| 国产成人啪免费观看软件| 精品少妇一区二区三区在线播放| 91精品欧美久久久久久动漫 | 亚洲精品videosex极品| 成人午夜激情片| 久久久综合精品| 久久66热re国产| 91麻豆精品国产| 日韩专区在线视频| 91麻豆精品国产91久久久久久| 日韩午夜av电影| 日韩精品一级二级| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲欧美偷拍三级| 成人国产亚洲欧美成人综合网| 不卡av在线免费观看| 精品处破学生在线二十三| 麻豆视频观看网址久久| 日韩欧美成人一区| 国产麻豆精品95视频| 久久久精品人体av艺术| 国产成人av自拍| 日韩美女视频一区二区| 日本高清不卡视频| 午夜欧美大尺度福利影院在线看| 韩国视频一区二区| 久久女同互慰一区二区三区| 国产一区91精品张津瑜| 国产日韩v精品一区二区| 成人午夜私人影院| 亚洲尤物视频在线| 欧美一二三区在线观看| 国产精品一区在线观看乱码| 国产色综合久久| av在线播放不卡| 亚洲chinese男男1069| 日韩三级在线免费观看| 成人免费视频国产在线观看| 亚洲久本草在线中文字幕| 欧美一区国产二区| 不卡一卡二卡三乱码免费网站| 精品国免费一区二区三区| 国产.欧美.日韩| 亚洲国产精品欧美一二99| 日韩欧美中文一区二区| 粉嫩一区二区三区在线看| 亚洲男人的天堂av| 欧美电影免费观看高清完整版 | 日韩高清电影一区| 国产亲近乱来精品视频| 欧美色图免费看| 国产精品 欧美精品| 亚洲丝袜自拍清纯另类| 91精品国产91久久综合桃花| 成人小视频免费在线观看| 日韩一区精品字幕| 国产精品久久久久久亚洲伦 | www.欧美日韩| 香蕉加勒比综合久久| 亚洲精品一线二线三线无人区| 日韩精品1区2区3区| 国产午夜精品久久久久久久| 欧美日韩在线一区二区| 成人激情小说乱人伦| 久久精品二区亚洲w码| 亚洲一区在线播放| 国产精品久久久久毛片软件| 精品福利一二区| 欧美一区二区三区影视| 日本韩国精品在线| 99精品欧美一区二区蜜桃免费| 自拍偷拍亚洲欧美日韩| 久久综合久久综合久久| 91麻豆精品国产91久久久久久| 亚洲一二三四在线观看| 国产精品美女久久久久久久网站| 国产 日韩 欧美大片| 极品美女销魂一区二区三区免费| 日韩免费一区二区三区在线播放| 奇米影视一区二区三区小说| 国产精品久久夜| 日本一区二区电影| 国产无遮挡一区二区三区毛片日本| 成人av一区二区三区| 国产999精品久久久久久| 国产综合色精品一区二区三区| 精品欧美一区二区三区精品久久| 久久99精品网久久| 毛片av一区二区| 激情五月激情综合网| 经典一区二区三区| 国产精品亚洲视频| 国产69精品久久久久777| 久草热8精品视频在线观看| 久久精品国产亚洲aⅴ| 另类小说图片综合网| 国产精品综合一区二区| 国产69精品一区二区亚洲孕妇| 亚洲最大的成人av| 亚洲国产一区二区在线播放| 一区二区三区四区精品在线视频| 欧美一卡2卡三卡4卡5免费| 欧美日韩一区二区不卡| 欧美一区二区三区思思人| 欧美日韩免费高清一区色橹橹 | 成人美女视频在线观看| 99国产精品视频免费观看| 日本精品一级二级| 制服丝袜亚洲精品中文字幕| 国产精品污www在线观看| 欧美高清一级片在线观看| 亚洲激情自拍偷拍| 亚洲国产日韩av| 激情久久五月天| 91亚洲资源网| 欧美电视剧免费观看| 国产婷婷精品av在线| 亚洲一区成人在线| 国产精品一区专区| 在线视频你懂得一区| 日韩三级av在线播放| 国产精品伦一区| 日韩精品视频网| 99视频精品全部免费在线| 6080日韩午夜伦伦午夜伦| 久久精品男人的天堂| 午夜视频在线观看一区二区| 国产91精品欧美| 制服丝袜av成人在线看| 国产精品午夜电影| 日本特黄久久久高潮| 成人美女视频在线看| 日韩欧美色综合| 一区二区三区四区av| 岛国精品在线观看|