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

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

?? bstreem.txt

?? C++描述的數據結構內容,在C++builder的環境中運行,這是第二部分
?? TXT
字號:
//二叉搜索樹的類定義BSTree.h
template<class T>class BSTree {
 private:
  BSTree<T> *left;//左子樹指針
  BSTree<T> *right;//右子樹指針
 public:
  T data;//數據域
  //構造函數
  BSTree():left(NULL),right(NULL) { }
  BSTree(T item,BSTree<T> *left1=NULL,
    BSTree<T> *right1=NULL):data(item),
    left(left1),right(right1){ }
  BSTree<T> *&Left(){return left;}
  BSTree<T> *&Right(){return right;}
//初始化二叉搜索樹,即把樹根指針置空
  void InitBSTree(BSTree<T> *&BST);
//判斷二叉搜索樹是否為空
  bool BSTreeEmpty(BSTree<T> *&BST);
//從二叉搜索樹中查找元素
  bool Find(BSTree<T> *&BST,T item);
//更新二叉搜索樹中的結點值
  bool Update(BSTree<T> *&BST,const T item,T newc);
//向二叉搜索樹中插入元素
  void Insert(BSTree<T> *&BST,const T &item);
//從二叉搜索樹中刪除元素
  bool Delete(BSTree<T> *&BST,T item);
//利用數組建立一棵二叉搜索樹
  void CreateBSTree(BSTree<T> *&BST,T a[],int n);
//中序遍歷輸出二叉搜索樹中的所有結點
  void Inorder(BSTree<T> *&BST);
//求二叉搜索樹的深度
  int BSTreeDepth(BSTree<T> *&BST);
//求二叉搜索樹中所有結點數
  int BSTreeCount(BSTree<T> *&BST);
//求二叉搜索樹中所有葉子結點數
  int BSTreeLeafCount(BSTree<T> *&BST);
//按照二叉搜索樹的廣義表表示輸出二叉搜索樹
  void PrintBSTree(BSTree<T> *&BT);
//清除二叉搜索樹,使之變為一棵空樹
  void ClearBSTree(BSTree<T> *&BT);
};  
//二叉搜索樹類的實現BSTree.cpp
//初始化二叉樹,即把樹根指針置空
template<class T>
void BSTree<T>::InitBSTree(BSTree<T> *&BST)
{BST=NULL;}

//判斷二叉樹是否為空
template<class T>
bool BSTree<T>::BSTreeEmpty(BSTree<T> *&BST)
{return BST==NULL;}

//從二叉搜索樹中查找元素
template<class T>
bool BSTree<T>::Find(BSTree<T> *&BST,T item)
{if(BST==NULL) return false;
 else {if(item==BST->data) {
       	item=BST->data;
	return true;}
       	else if(item<BST->data)//遞歸查找左子樹
	  return Find(BST->left,item);
	else                  //遞歸查找右子樹
       return Find(BST->right,item);
}}
//更新二叉搜索樹中的結點值
template<class T>
bool BSTree<T>::Update(BSTree<T> *&BST,const T item,T newc)
{if(BST==NULL) return false;
 else {
   if(item==BST->data) {
     BST->data=newc;
     return true;}
   else if(item<BST->data)
	  return Update(BST->left,item,newc);
	else
	  return Update(BST->right,item,newc);}
}
//向二叉搜索樹中插入元素
template<class T>
void BSTree<T>::Insert(BSTree<T> *&BST,const T &item)
{if(BST==NULL)
  {BSTree<T> *p=new BSTree<T>;
   p->data=item;
   p->left=p->right=NULL;
   BST=p;}
 else if(item<BST->data)
       Insert(BST->left,item);  //向左子樹中插入元素
      else
       Insert(BST->right,item);//向右子樹中插入元素
}
//從二叉搜索樹中刪除元素
template<class T>
bool BSTree<T>::Delete(BSTree<T> *&BST,T item)
{//從二叉搜索樹中查找值為item的結點,指針t指向待比較的結點,
 //指針s指向t的雙親結點,從樹根結點開始比較
  BSTree<T> *t=BST,*s=NULL;
  while(t!=NULL) {
     if(item==t->data) break;
     else if(item<t->data) {
	  s=t; t=t->left;}
	  else {s=t; t=t->right;}
  }
 //若沒有找到待刪除的結點,則返回假
  if(t==NULL) return false;
 //分三種不同情況刪除已查找到的t結點
  if(t->left==NULL && t->right==NULL)
   { //對t結點(即待刪除的結點)為葉子結點的情況進行處理
    if(t==BST) BST=NULL;
    else if(t==s->left) s->left=NULL;
        else  s->right=NULL;
    delete t;}
  else if(t->left==NULL || t->right==NULL)
	{ //對t結點為單分支結點的情況進行處理
	 if(t==BST) {  //刪除樹根結點
	 if(t->left==NULL) BST=t->right;
	 else  BST=t->left;}
       else {//刪除非樹根結點時,分四種情況進行處理
	 if(t==s->left && t->left!=NULL)
            s->left=t->left;
	 else if(t==s->left && t->right!=NULL)
	         s->left=t->right;
	       else if(t==s->right && t->left!=NULL)
                s->right=t->left;
	 else if(t==s->right && t->right!=NULL)
	        s->right=t->right;}
	 delete t;  //回收t結點,即t指針所指向的結點
       }
   else if(t->left!=NULL && t->right!=NULL)
    { //對t結點為雙分支結點的情況進行處理
      //p初始指向t結點,q初始指向p結點的左子樹的根結點
     BSTree<T> *p=t,*q=t->left;
      //查找t結點的中序前驅結點,查找結束后q結點為t結點
      //的中序前驅結點,p結點為q結點的雙親結點
     while(q->right!=NULL) {p=q;q=q->right;}
      //q結點的值賦給t結點
       t->data=q->data;
      //刪除右子樹為空的q結點,使它的左子樹鏈接到它所在的鏈接位置
       if(p==t) t->left=q->left;
       else p->right=q->left;
    //回收q結點
       delete q;}
  //刪除結束后返回真
    return true;
}
//利用數組建立一棵二叉搜索樹
template<class T>
void BSTree<T>::CreateBSTree(BSTree<T> *&BST,T a[],int n)
{BST=NULL;
 for(int i=0;i<n;i++)
   Insert(BST,a[i]);
}
//中序遍歷輸出二叉搜索樹中的所有結點
template<class T>
void BSTree<T>::Inorder(BSTree<T> *&BST)
{if(BST!=NULL) {
  Inorder(BST->left);
  cout<<BST->data<<' ';
  Inorder(BST->right);}
}
//求二叉搜索樹的深度
template<class T>
int BSTree<T>::BSTreeDepth(BSTree<T> *&BST)
{if(BST==NULL) return 0;//對于空樹,返回0并結束遞歸
 else
  {  //計算左子樹的深度
   int dep1=BSTreeDepth(BST->left);
     //計算右子樹的深度
   int dep2=BSTreeDepth(BST->right);
     //返回樹的深度
   if(dep1>dep2) return dep1+1;
   else return dep2+1;}
}
//求二叉搜索樹中所有結點數
template<class T>
int BSTree<T>::BSTreeCount(BSTree<T> *&BST)
{if(BST==NULL) return 0;
 else 
  return BSTreeCount(BST->left)+BSTreeCount(BST->right)+1;
}
//求二叉搜索樹中所有葉子結點數
template<class T>
int BSTree<T>::BSTreeLeafCount(BSTree<T> *&BST)
{if(BST==NULL) return 0;
 else if(BST->left==NULL && BST->right==NULL) return 1;
 else return BSTreeLeafCount(BST->left)+BSTreeLeafCount(BST->right);
}
//按照二叉樹的廣義表表示輸出二叉搜索樹
template<class T>
void BSTree<T>::PrintBSTree(BSTree<T> *&BST)
{if(BST==NULL) return;  //樹為空時返回
 else {//否則執行如下操作
       cout<<BST->data;  //輸出根結點的值
       if(BST->left!=NULL || BST->right!=NULL)
	{cout<<'(';  //輸出左括號
	 PrintBSTree(BST->left);  //輸出左子樹
	 if(BST->right!=NULL)
	  cout<<',';  //若右子樹不為空則輸出逗號分隔符
         PrintBSTree(BST->right);  //輸出右子樹
	  cout<<')';} //輸出右括號
}}
//清除二叉搜索樹,使之變為一棵空樹
template<class T>
void BSTree<T>::ClearBSTree(BSTree<T> *&BST)
{if(BST!=NULL)
  {//當二叉樹非空時進行如下操作
   ClearBSTree(BST->left);   //刪除左子樹
   ClearBSTree(BST->right);  //刪除右子樹
   delete BST;               //刪除根結點
   BST=NULL;}}               //置根指針為空
//二叉搜索樹相關操作的測試BSTreeM.cpp
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include "BSTree.h"
#include "BSTree.cpp"
void main()
{cout<<"BSTreeM.cpp運行結果:\n";
 char b[50]="abxycdMNefgzkl";
 BSTree<char> t,*B;
 int n,m=14;
 t.InitBSTree(B);
 t.CreateBSTree(B,b,m);
 n=t.BSTreeCount(B);
 cout<<"二叉搜索樹的所有結點數="<<n<<endl;
 if(!t.BSTreeEmpty(B))
   cout<<"二叉搜索樹非空!\n";
 else
   cout<<"二叉搜索樹為空!\n";
 cout<<"中序遍歷二叉搜索樹:\n";
 t.Inorder(B);cout<<endl;
 n=t.BSTreeDepth(B);
 cout<<"二叉搜索樹的深度="<<n<<endl;
 n=t.BSTreeLeafCount(B);
 cout<<"二叉搜索樹的所有葉子結點數="<<n<<endl;
 cout<<"按二叉搜索樹的廣義表輸出二叉搜索樹:\n";
 t.PrintBSTree(B);cout<<endl;
 if(t.Find(B,'d')) cout<<"查找成功!\n";
 else cout<<"查找不成功!\n";
 if(t.Update(B,'d','D')) cout<<"更新成功!\n";
 else cout<<"更新不成功!\n";
 cout<<"中序遍歷二叉搜索樹:\n";
 t.Inorder(B);cout<<endl;
 t.Insert(B,'m');
 cout<<"中序遍歷二叉搜索樹:\n";
 t.Inorder(B);cout<<endl;
 t.Insert(B,'n');
 cout<<"中序遍歷二叉搜索樹:\n";
 t.Inorder(B);cout<<endl;
 n=t.BSTreeDepth(B);
 cout<<"二叉搜索樹的深度="<<n<<endl;
 if(t.Delete(B,'e')) cout<<"刪除成功!\n";
 else cout<<"刪除不成功!\n";
 cout<<"中序遍歷二叉搜索樹:\n";
 t.Inorder(B);cout<<endl;
 n=t.BSTreeDepth(B);
 cout<<"二叉搜索樹的深度="<<n<<endl;
 cin.get();}
BSTreeM.cpp運行結果:
二叉搜索樹的所有結點數=14
二叉搜索樹非空!
中序遍歷二叉搜索樹:
M N a b c d e f g k l x y z 
二叉搜索樹的深度=10
二叉搜索樹的所有葉子結點數=3
按二叉搜索樹的廣義表輸出二叉搜索樹:
a(M(,N),b(,x(c(,d(,e(,f(,g(,k(,l)))))),y(,z))))
查找成功!
更新成功!
中序遍歷二叉搜索樹:
M N a b c D e f g k l x y z 
中序遍歷二叉搜索樹:
M N a b c D e f g k l m x y z 
中序遍歷二叉搜索樹:
M N a b c D e f g k l m n x y z 
二叉搜索樹的深度=12
刪除成功!
中序遍歷二叉搜索樹:
M N a b c D f g k l m n x y z 
二叉搜索樹的深度=11

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91偷拍与自偷拍精品| 国产精品1024| 亚洲精品视频在线观看网站| 国产亚洲欧美日韩日本| 欧美精品一区二区三区蜜桃视频| 欧美一区二区三级| 欧美日韩卡一卡二| 欧美美女一区二区| 宅男噜噜噜66一区二区66| 欧美美女喷水视频| 日韩一区二区三区在线观看| 日韩视频国产视频| 久久综合色之久久综合| 久久中文字幕电影| 中文字幕一区二区三中文字幕| 国产精品网站在线播放| 最新国产成人在线观看| 亚洲综合丁香婷婷六月香| 亚洲国产中文字幕在线视频综合| 亚洲国产精品久久久久秋霞影院| 亚洲图片欧美综合| 麻豆精品久久久| 久久99国产精品免费| 国产盗摄女厕一区二区三区| 99免费精品视频| 欧美三级日韩在线| 欧美成人精品1314www| 中文字幕成人网| 夜夜嗨av一区二区三区中文字幕| 日本不卡免费在线视频| 国产凹凸在线观看一区二区| 在线视频国产一区| 日韩欧美在线不卡| 自拍偷拍国产精品| 男女男精品视频| 成人18视频日本| 欧美一区二视频| 国产精品全国免费观看高清 | 国产免费成人在线视频| 亚洲人成精品久久久久久| 日本三级亚洲精品| 99re这里只有精品视频首页| 91麻豆精品国产自产在线观看一区 | 国产乱人伦偷精品视频免下载| 国产v综合v亚洲欧| 欧美一区二区二区| 日韩毛片视频在线看| 国产一区在线观看视频| 欧洲日韩一区二区三区| 久久久99久久| 麻豆精品视频在线观看免费| 日本二三区不卡| 国产三级三级三级精品8ⅰ区| 亚洲蜜臀av乱码久久精品| 国产乱子伦视频一区二区三区| 欧美性一二三区| 国产精品亲子伦对白| 久草中文综合在线| 日韩小视频在线观看专区| 亚洲欧美视频在线观看视频| 国产91在线|亚洲| 日韩视频一区二区三区在线播放| 亚洲一区视频在线观看视频| 成人av在线播放网址| 久久久久久久综合色一本| 日本麻豆一区二区三区视频| 欧美又粗又大又爽| 尤物在线观看一区| 99国产精品视频免费观看| 欧美激情一区三区| 国产激情一区二区三区四区 | 国产专区欧美精品| 中文字幕亚洲区| 久久激情综合网| 欧美顶级少妇做爰| 三级不卡在线观看| 欧美日韩亚洲高清一区二区| 亚洲影院在线观看| 在线亚洲精品福利网址导航| 一区二区三区中文字幕| 日本精品一区二区三区四区的功能| 国产精品高潮呻吟久久| 成人午夜伦理影院| 国产精品乱码妇女bbbb| 成人一区二区三区中文字幕| 精品国产亚洲在线| 国产suv精品一区二区6| 国产精品午夜免费| 91精品福利在线| 亚洲午夜免费视频| 欧美一二三四区在线| 免费看精品久久片| 精品久久久久av影院| 国产精品亚洲一区二区三区在线| 久久免费午夜影院| 岛国精品在线播放| 亚洲日本va在线观看| 欧洲精品在线观看| 麻豆91在线观看| 国产日韩影视精品| 91精品办公室少妇高潮对白| 一区二区三区中文免费| 美女一区二区三区| 久久久影视传媒| 另类小说综合欧美亚洲| 日韩欧美中文字幕公布| 日本亚洲免费观看| 久久夜色精品国产噜噜av | 国产精品美女一区二区三区 | 亚洲国产精品欧美一二99| 欧美日韩精品欧美日韩精品| 免费成人美女在线观看.| 国产日韩欧美综合一区| 欧美在线视频不卡| 国产九色sp调教91| 亚洲国产视频直播| 国产欧美精品一区| 欧美久久免费观看| 成人一道本在线| 视频一区欧美精品| 国产精品第13页| 日韩午夜激情免费电影| 91免费观看视频在线| 久久99国产精品尤物| 亚洲主播在线播放| 中文字幕第一区综合| 日韩一区二区在线观看视频| 91论坛在线播放| 国产一区二区三区视频在线播放| 一区二区三区精品| 欧美国产日本韩| 欧美成人性福生活免费看| 在线精品国精品国产尤物884a | 国产亲近乱来精品视频 | 久久精品国产秦先生| 亚洲综合色婷婷| 国产精品国产三级国产普通话三级| 在线成人高清不卡| 在线观看欧美精品| 99re这里只有精品6| 国产成人av电影在线观看| 日韩 欧美一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲精品在线一区二区| 日韩一区二区在线观看| 欧美日本韩国一区二区三区视频| 99re8在线精品视频免费播放| 成人综合婷婷国产精品久久免费| 久久国产精品99精品国产| 蜜臀久久久99精品久久久久久| 亚洲风情在线资源站| 一区二区在线观看视频 | 欧美日韩三级在线| 色综合久久99| 色天使久久综合网天天| 91在线观看免费视频| 91在线视频18| 一道本成人在线| 欧美性受极品xxxx喷水| 91成人免费在线视频| 欧美写真视频网站| 欧美性色综合网| 欧美精品久久久久久久久老牛影院| 欧美午夜精品一区二区蜜桃| 欧美日韩亚洲综合在线| 制服丝袜亚洲播放| 欧美一区二区性放荡片| 精品国产三级a在线观看| 久久无码av三级| 国产精品久久久久久久久免费樱桃| 国产欧美一区二区三区在线老狼| 国产欧美日韩另类视频免费观看| 国产精品狼人久久影院观看方式| 国产精品电影院| 亚洲一区视频在线观看视频| 日韩在线a电影| 国产在线视频不卡二| 成人精品一区二区三区四区 | 丝袜美腿一区二区三区| 免费xxxx性欧美18vr| 国产成人精品综合在线观看| 91亚洲国产成人精品一区二三| 日本韩国一区二区三区| 91精品国产欧美日韩| 日本一区免费视频| 亚洲成人手机在线| 国内精品视频一区二区三区八戒| jizz一区二区| 欧美精选一区二区| 国产午夜精品理论片a级大结局| 亚洲欧美电影一区二区| 日韩av一级片| 成人性生交大片免费看视频在线| 欧美三级午夜理伦三级中视频| 精品福利在线导航| 亚洲午夜精品在线| 国产成人av影院| 制服丝袜成人动漫| 18欧美亚洲精品| 麻豆91在线看|