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

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

?? phecs.cpp

?? 平衡二叉樹操作的演示 一、 需求分析 (1) 利用平衡二叉樹實現動態查找表。實現查找
?? CPP
字號:

#include<stdio.h>
#include<malloc.h>

#define LH 1  //左高
#define EH 0 //等高
#define RH -1 //右高
#define NULL 0

#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)<(b))
#define LQ(a,b) ((a)<=(b))

enum Boolean {FALSE,TRUE};

typedef int Status;

typedef struct BSTNode{
 int data;
 int bf;//結點的平衡因子
 struct BSTNode *lchild,*rchild;//左、右孩子指針
}BSTNode,*BSTree;

void R_Rotate(BSTree &p){
//右旋處理,處理之后P指向新的樹根結點,放置處理之前的左子樹的根結點
 BSTree lc;
 lc=p->lchild;   
 p->lchild=lc->rchild;  
 lc->rchild=p;  
 p=lc;
}//R_Rotate

void L_Rotate(BSTree &p){
//左旋處理
 BSTree rc;
 rc=p->rchild;   
 p->rchild=rc->lchild;  
 rc->lchild=p;  
 p=rc;
}//L_Rotate

void LeftBalance(BSTree &T){
//對心指針T所指結點為根的二叉樹作左平衡旋轉處理,本算法結束時,指針T指向新的根結點
 BSTree lc,rd;
 lc=T->lchild; 
 switch(lc->bf){ //檢查*T的左子樹的平衡度,并作相應平衡處理
  case LH:  //新結點插入在*T的左孩子的左子樹上,要作單右旋處理
   T->bf=lc->bf=EH;
   R_Rotate(T); break;
  case RH:  //新結點插入在*T的左孩子的右子樹上,要作雙旋處理
   rd=lc->rchild; //rd指向*T的左孩子的右子樹根
   switch(rd->bf){  //修改*T4及其左孩子的平衡因子
    case LH:T->bf=RH; lc->bf=EH; break;
    case EH:T->bf=lc->bf=EH;     break;
    case RH:T->bf=EH; lc->bf=LH; break;
   }//switch(rd->bf)
   rd->bf=EH;
   L_Rotate(T->lchild);  //對*T的左子樹作左旋平衡處理
   R_Rotate(T);   //對*T作右旋平衡處理
 }//switch(lc->bf)
}//LeftBalance

void RightBalance(BSTree &T){
//對心指針T所指結點為根的二叉樹作右平衡旋轉處理,本算法結束時,指針T指向新的根結點
 BSTree rc,ld;
 rc=T->rchild;  //rc指向*T的右子樹根結點
 switch(rc->bf){ //檢查*T的右子樹的平衡度,并作相應平衡處理
  case RH:  //新結點插入在*T的右孩子的右子樹上,要作單左旋處理
   T->bf=rc->bf=EH;
   L_Rotate(T); break;
  case LH:  //新結點插入在*T的右孩子的左子樹上,要作雙旋處理
   ld=rc->lchild; //ld指向*T的右孩子的左子樹根
   switch(ld->bf){  //修改*T及其右孩子的平衡因子
    case LH:T->bf=EH; rc->bf=LH; break;
    case EH:T->bf=rc->bf=EH;     break;
    case RH:T->bf=RH; rc->bf=EH; break;
   }//switch(ld->bf)
   ld->bf=EH;
   R_Rotate(T->rchild);  //對*T的右子樹作右旋平衡處理
   L_Rotate(T);   //對*T作左旋平衡處理
 }//switch(rc->bf)
}//RightBalance

Status InsertAVL(BSTree &T,int e,enum Boolean &taller){
//若在平衡的二叉排序樹T中不存在和e有相同關鍵字的結點,則插入一個數據元素為有的新結點,并返回1,否則返回0。若因插入而使二叉
//排序樹失去平衡,則作平衡旋轉處理,布爾變量taller反映T長高與否
 if(!T){//插入新結點,樹“長高”,置taller為TRUE
  T=(BSTree)malloc(sizeof(BSTNode)); T->data=e;
  T->lchild=T->rchild=NULL; T->bf=EH; taller=TRUE;
 }
 else{
  if(EQ(e,T->data))  //樹中已存在和e有相同關鍵字的點則不再插入
   { taller=FALSE; return 0; }
  if(LT(e,T->data)){   //繼續在*T的左子樹中進行搜索
   if(!InsertAVL(T->lchild,e,taller)) return 0;  //未插入
   if(taller)    //已插入到*T的左子樹中且左子樹“長高”
    switch(T->bf){  //檢查*T的平衡度
     case LH:  //原本左子樹比右子樹高,需要作左平衡處理
      LeftBalance(T); taller=FALSE; break;
     case EH:  //原本左、右子樹等高,現因左子樹增高而使樹增高
      T->bf=LH; taller=TRUE; break;
     case RH:  //原本右子樹比左子樹高,現因左、右子樹等高
      T->bf=EH; taller=FALSE; break;
    }//switch(T->bf)
  }//if
  else{      //繼續在*T的右子樹中進行搜索
   if(!InsertAVL(T->rchild,e,taller)) return 0;//未插入
   if(taller)  //已插入到*T的右子樹且右子樹長高
    switch(T->bf){//檢查*T的平衡度
     case LH://原本左子樹比右子樹高,現左、右子樹等高
      T->bf=EH; taller=FALSE; break;
     case EH://原本左、右子樹等高,現因右子樹增高而使樹增高
      T->bf=RH; taller=TRUE; break;
     case RH:   //原本右子樹比左子樹高,需要作右平衡處理
      RightBalance(T); taller=FALSE; break;
    }//switch(T->bf)
  }//else
 }//else
 return 1;
}//InsertAVL

Status DeleteAVL(BSTree &T,int e,enum Boolean &taller){
//刪除平衡二叉樹的元素,并做平衡處理
 if(!T)  return 0;
 else {
  if(EQ(e,T->data))  //找到和e相等的結點
  {
   if(!T->lchild&&!T->rchild) {taller=FALSE; free(T); T=NULL;return 1;}//該結點為葉子結點
   else if(T->lchild) {//該結點有左子樹
    if(!T->lchild->rchild) {//在左子樹中尋找最大值來替代T
     T->data=T->lchild->data;
     T->lchild->data=e;
     DeleteAVL(T->lchild,e,taller);
    }
    else {
     T->data=T->lchild->rchild->data;
     T->lchild->rchild->data=e;
     DeleteAVL(T->lchild->rchild,e,taller);
    }
    if(!taller)  //已從左子樹刪除且左子樹變矮
     switch(T->bf){//檢查*T的平衡度
      case LH://原本左子樹比右子樹高,現左、右子樹等高
       T->bf=EH; taller=FALSE; break;
      case EH://原本左、右子樹等高,現因左子樹變矮而使樹增高
       T->bf=RH; taller=TRUE; break;
      case RH:   //原本右子樹比左子樹高,需要作右平衡處理
       RightBalance(T); taller=FALSE; break;
     }//switch(T->bf)
   }//else if
   else if(T->rchild) {//該結點有右子樹
    if(!T->rchild->lchild) {//在右子樹中尋找最小值來替代T
     T->data=T->rchild->data;
     T->rchild->data=e;
     DeleteAVL(T->rchild,e,taller);
    }
    else {
     T->rchild->data=T->rchild->lchild->data;
     T->rchild->lchild->data=e;
     DeleteAVL(T->rchild->lchild,e,taller);
     }
    if(!taller)    //已從右子樹刪除且右子樹變矮
     switch(T->bf){  //檢查*T的平衡度
      case LH:  //原本左子樹比右子樹高,需要作左平衡處理
       LeftBalance(T); taller=FALSE; break;
      case EH:  //原本左、右子樹等高,現因右子樹變矮而使樹增高
       T->bf=LH; taller=TRUE; break;
      case RH:  //原本右子樹比左子樹高,現左、右子樹等高
       T->bf=EH; taller=FALSE; break;
     }//switch(T->bf)
   }//else if
  }
  if(LT(e,T->data)){   //繼續在*T的左子樹中進行搜索
   if(!DeleteAVL(T->lchild,e,taller)) return 0;  //未刪除
  }//if
  else{      //繼續在*T的右子樹中進行搜索
   if(!DeleteAVL(T->rchild,e,taller)) return 0;//未刪除
  }//else
 }//else
 return 1;
}//DeleteAVL

void Print_BSTree(BSTree T,int i)//按樹狀打印輸出二叉樹的元素,i表示結點所在層次,初次調用時i=0
{
  int j;
  if(T->rchild) Print_BSTree(T->rchild,i+1);
  for(j=1;j<=i;j++) printf("     "); //打印i個空格以表示出層次
  printf("%5d\n",T->data); //打印T元素,換行
  if(T->lchild) Print_BSTree(T->lchild,i+1);
}//Print_BiTree

void Destroy_BSTree(BSTree &T)
{//銷毀平衡二叉樹
 BSTree p;
 p=T;
 while(p->lchild&&p->rchild)
 {
  Destroy_BSTree(p->lchild);
  Destroy_BSTree(p->rchild);
 }
 if(!p->lchild&&p->rchild) Destroy_BSTree(p->rchild);
 if(!p->rchild&&p->lchild) Destroy_BSTree(p->lchild);
 if(!p->lchild&&!p->rchild) free(p);
 T=NULL;
}//Destroy_BSTree

void main()
{
 char num;
 int e,i;
 enum Boolean taller;
 BSTree T,T2;
 T=T2=NULL;
 i=0;
 for( ; ; )
 {
   printf("bstree\n");
   printf(" MENU:\n");
   printf(" 1.Insert;\n");
   printf(" 2.Delete;\n");
   printf(" 3.Quit.\n");
   printf(" 請選擇:");
   num=getchar();
   if(num=='1')
   {
    printf("請輸入一個整數:");
    scanf("%d",&e);
    taller=FALSE;
    InsertAVL(T,e,taller);
    Print_BSTree(T,i);
   }
   else if(num=='2')
   {
    if(T==NULL) printf("空樹!\n");
    else{
     printf("請輸入一個整數:");
     scanf("%d",&e);
     taller=TRUE;
     DeleteAVL(T,e,taller);
     if(T==NULL) printf("空樹!\n");
     else Print_BSTree(T,i);
    } //else
   }
   else if(num=='3') break;
   else printf("Error!\n");
   getchar();
 } //for
 printf("Tree 1:\n");//合并兩個平衡二叉樹
 if(T==NULL) printf("空數!\n");
 else{
  Print_BSTree(T,0);
 }
 printf("創建樹2:\n");
 for( ; ; )
 {
  printf("請輸入一個整數(當輸入為0時,將停止輸入,第二棵二叉樹創建結束):");
  scanf("%d",&e);
  if(e==0) break;
  taller=FALSE;
  InsertAVL(T2,e,taller);
  InsertAVL(T,e,taller);//將樹2并到樹1中
  Print_BSTree(T2,0);
 }
 printf("合并后的樹:\n");//打印出合并后的樹
 Print_BSTree(T,i);
 Destroy_BSTree(T);
 Destroy_BSTree(T2);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本亚洲欧美天堂免费| 欧美视频一区二区三区在线观看| www.欧美精品一二区| 欧美影院精品一区| 国产视频一区二区在线| 日韩av成人高清| 色综合久久九月婷婷色综合| 久久婷婷国产综合国色天香 | 91视频com| 精品电影一区二区三区| 亚洲国产另类精品专区| 99国产精品久久| 国产欧美综合色| 国产在线一区二区| 日韩精品在线看片z| 午夜欧美电影在线观看| 99精品欧美一区二区三区小说| 久久夜色精品国产噜噜av| 一区二区三区在线观看欧美| 国产99久久久国产精品潘金网站| 日韩精品影音先锋| 欧美日韩高清在线播放| 黄页视频在线91| 一本色道久久加勒比精品 | 亚洲精品国产无套在线观| 狠狠狠色丁香婷婷综合久久五月| 欧美人与性动xxxx| 亚洲福利一区二区三区| 欧美三级电影在线看| 亚洲美女区一区| 91在线免费视频观看| 国产精品卡一卡二| 94色蜜桃网一区二区三区| 亚洲色图欧美激情| 在线精品观看国产| 亚洲伊人伊色伊影伊综合网 | 成人一道本在线| 国产欧美一区二区精品仙草咪| 国产米奇在线777精品观看| 久久久久久**毛片大全| 国产成人精品免费在线| 亚洲国产成人私人影院tom| 国产69精品久久99不卡| 国产精品国产三级国产三级人妇 | www.一区二区| 亚洲另类在线一区| 欧美无人高清视频在线观看| 亚洲国产欧美在线| 日韩欧美的一区| 国产成人精品三级| 一个色综合网站| 日韩一区二区三区电影| 国产成人综合在线| 亚洲免费看黄网站| 欧美一区二区三区视频| 国产精一品亚洲二区在线视频| 亚洲国产精华液网站w | 综合久久久久久久| 精品视频色一区| 韩国女主播成人在线观看| 国产精品美女一区二区在线观看| 一本色道久久综合狠狠躁的推荐| 日韩影视精彩在线| 久久久不卡影院| 欧美视频中文字幕| 国产一区久久久| 伊人色综合久久天天人手人婷| 欧美一区二区三区四区视频| 懂色av一区二区在线播放| 亚洲乱码中文字幕综合| 日韩欧美一级二级| 97久久人人超碰| 精品一区二区三区免费视频| 亚洲日本在线看| 日韩一级欧美一级| 色婷婷久久久亚洲一区二区三区 | 极品少妇一区二区| 亚洲美女电影在线| 欧美tickle裸体挠脚心vk| 成年人网站91| 精东粉嫩av免费一区二区三区| 成人免费在线视频| 精品99999| 欧美日韩国产色站一区二区三区| 国产91丝袜在线播放九色| 亚洲成人免费看| 日韩一区在线看| 久久久久一区二区三区四区| 精品视频资源站| 99精品在线免费| 国产成人精品三级| 久久99最新地址| 日本在线播放一区二区三区| 亚洲婷婷国产精品电影人久久| 精品动漫一区二区三区在线观看 | 成人在线综合网| 精品一区二区在线观看| 污片在线观看一区二区| 亚洲伦在线观看| 中文字幕制服丝袜一区二区三区| 精品女同一区二区| 在线成人免费视频| 欧美喷潮久久久xxxxx| 色香蕉成人二区免费| 99视频精品在线| av动漫一区二区| 成人avav影音| a级高清视频欧美日韩| 国产成人精品网址| 国产精品123区| 国产91综合网| 成人av影视在线观看| 国产精品一区不卡| 国产 日韩 欧美大片| 国产jizzjizz一区二区| 国产成人鲁色资源国产91色综 | 国产麻豆视频一区| 国产一区亚洲一区| 国产一区二区三区av电影 | 日本不卡一二三| 日韩专区一卡二卡| 欧美aⅴ一区二区三区视频| 免费看日韩精品| 蜜臀久久99精品久久久画质超高清| 日韩电影在线免费看| 精品制服美女丁香| 国产精品一区二区久激情瑜伽 | 色欧美日韩亚洲| 日本韩国欧美一区| 欧美日韩国产综合一区二区| 在线播放视频一区| 日韩欧美一级精品久久| 久久免费电影网| 亚洲日本在线视频观看| 亚洲电影在线播放| 久久福利视频一区二区| 国产一区二区美女| 99久久精品免费看国产| 欧美美女网站色| 国产亚洲一区二区三区四区 | 一区二区三区免费在线观看| 亚洲成人在线免费| 久久精工是国产品牌吗| 国产激情视频一区二区三区欧美| 不卡电影一区二区三区| 欧美日韩夫妻久久| 久久欧美中文字幕| 伊人婷婷欧美激情| 久久99精品国产麻豆不卡| 成人动漫在线一区| 69精品人人人人| 国产精品免费观看视频| 天天色综合天天| 不卡欧美aaaaa| 欧美一级爆毛片| 亚洲免费av高清| 国内精品免费**视频| 欧美主播一区二区三区| 久久一区二区视频| 亚洲国产一区二区在线播放| 国产精品一区二区三区四区 | 久久久无码精品亚洲日韩按摩| 亚洲三级久久久| 国内精品写真在线观看| 在线日韩av片| 中文字幕的久久| 精品亚洲国内自在自线福利| 日本道精品一区二区三区 | 欧美一区二区三区思思人| 亚洲欧洲av另类| 国产一区视频导航| 欧美久久高跟鞋激| 一区二区三区在线观看动漫| 精品一区二区在线免费观看| 欧美色电影在线| 国产精品久久免费看| 久久国产欧美日韩精品| 色婷婷激情久久| 中文字幕av资源一区| 免费观看成人av| 欧美日韩国产一区二区三区地区| 国产精品黄色在线观看| 国产精品1区2区3区| 欧美不卡一二三| 老司机一区二区| 6080国产精品一区二区| 亚洲国产一区在线观看| 91福利视频在线| 亚洲视频小说图片| 99综合影院在线| 亚洲婷婷综合色高清在线| 成人黄色电影在线| 亚洲国产精品激情在线观看| 国产麻豆视频精品| 久久精品视频在线免费观看| 国产一区二区三区香蕉| 久久久久久久久久电影| 韩国女主播一区| 国产无人区一区二区三区| 国产乱对白刺激视频不卡|