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

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

?? btree.cpp

?? btree算法
?? CPP
字號:
// btree.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "btree.h"
#include <malloc.h>

template<class T>CBTree<T>::CBTree()
{
	;
}

template<class T>CBTree<T>::~CBTree()
{
	;
}

//左單旋轉 (RotateLeft) 
//          A                C 
//         / \              / \ 
//        B   C     =>     A   E 
//        |  / \          / \  | 
//          D   E        B   D + 
//          |   |        |   | 
//              + 
template<class T> void CBTree<T>::RotateLeft(node<T> **root)
{
	node<T> *A = *root;
	node<T> *C = A->rnext;
	node<T> *D = C->lnext;
	A->rnext = D;
	C->lnext = A;
	*root = C;
}

//右單旋轉 (RotateRight) 
//          A                B 
//         / \              / \ 
//        B   C     =>     D   A 
//       / \  |            |  / \ 
//      D   E              + E   C 
//      |   |                |   | 
//      + 
template<class T> void CBTree<T>::RotateRight(node<T> **root)
{
	node<T> *A = *root;
	node<T> *B = A->lnext;
	node<T> *E = B->rnext;
	B->rnext = A;
    A->lnext = E;
	*root = B;
}


template<class T> void CBTree<T>::LeftBalance(node<T> **root) 
{     
	node<T> *A = *root;     
	node<T> *B = A->lnext;     
	node<T> *E = B->rnext;         
	switch (B->bf) 
	{    
		//左高(LL型)         
		//          A(1)             B(0)         
		//         / \              / \         
		//      B(1)  C     =>     D   A(0)         
		//       / \  |            |  / \         
		//      D   E              + E   C         
		//      |   |                |   |         
		//      +     
	case LH:         
		A->bf = B->bf = EH;         
		RotateRight(root);         
		break;         
		//右高(LR型)         
		//          A(2)             A                E(0)         
		//         / \              / \              /   \         
		//      B(-1) C    ==>     E   C    ==>    B(0)  A(-1)         
		//       / \  |     L     / \  |     R     / \   / \         
		//      D   E(1)         B   G            D   F G   C         
		//      |  / \          / \  |            |   | |   |         
		//        F   G        D   F                  +         
		//        |   |        |   |         
		//        +                +     
	case RH:         
		switch (E->bf) 
		{         
		case LH:             
			A->bf = RH;             
			B->bf = EH;             
			break;         
		case EH:             
			A->bf = EH;             
			B->bf = EH;            
			break;         
		case RH:             
			A->bf = EH;             
			B->bf = LH;             
			break;   
		default:
			break;
		}         
		E->bf = EH;         
		RotateLeft(&(*root)->lnext);         
		RotateRight(root);         
		break;         
	default:          
		break;     
	} 
}


template<class T> void CBTree<T>::RightBalance(node<T> **root) 
{     
	node<T> *A = *root;     
	node<T> *C = A->rnext;     
	node<T> *D = C->lnext;         
	switch (C->bf) 
	{         
		//右高(RR型)         
		//          A(-1)            C         
		//         / \              / \        
		//        B   C(-1) =>     A   E         
		//        |  / \          / \  |         
		//          D   E        B   D +         
		//          |   |        |   |         
		//              +     
	case RH:        
		A->bf = C->bf = EH;         
		RotateLeft(root);         
		break;         
		//左高(RL型)         
		//          A                A                 D         
		//         / \              / \              /   \         
		//        B   C    ==>     B   D    ==>     A     C         
		//        |  / \    R      |  / \    L     / \   / \         
		//          D   E            F   C        B   F G   E         
		//         / \  |            |  / \       |   | |   |         
		//        F   G                G   E            +         
		//        |   |                |   |         
		//            +                +     
	case LH:          
		switch (D->bf) 
		{         
		case RH:             
			A->bf = LH;             
			C->bf = EH;             
			break;         
		case EH:             
			A->bf = EH;             
			C->bf = EH;             
			break;         
		case LH:             
			A->bf = EH;             
			C->bf = RH;             
			break;         
		}         
		D->bf = EH;         
		RotateRight(&(*root)->rnext);         
		RotateLeft(root);         
		break;         
	default:           
		break;     
	} 
} 


template<class T> int CBTree<T>::InsertAVL(node<T> **p_root, T key,node<T> **p_keypos, bool &taller) 
{     
	node<T> *root = *p_root;         
	if (root == NULL) 
	{ 
		//沒有找到         
		node<T> *p = (node<T> *)malloc(sizeof(node<T>));         
		p->data = key;         
		p->lnext = p->rnext = NULL;         
		p->bf = EH;                 
		*p_root = p;         
		taller = true;         
		return 0;     
	}     
	else if (root->data == key) 
	{ 
		//找到         
		*p_keypos = root;         
		return -1;     
	}     
	else if (key < root->data) 
	{ 
		//繼續找         
		if (-1 == InsertAVL(&root->lnext, key, p_keypos, taller)) 
		{             
			return -1;         
		}         
		if (taller) 
		{             
			switch (root->bf) 
			{             
			case LH:                 
				LeftBalance(p_root);                 
				taller = false;                 
				break;             
			case EH:                 
				root->bf = LH;                 
				taller = true;                 
				break;             
			case RH:                 
				root->bf = EH;                 
				taller = false;                 
				break;             
			}         
		}         
		return 0;     
	}     
	else 
	{ 
		//繼續找         
		if (-1 == InsertAVL(&root->rnext, key, p_keypos, taller)) 
		{             
			return -1;         
		}         
		if (taller) 
		{             
			switch(root->bf) 
			{             
			case LH:                 
				root->bf = EH;                 
				taller = false;                 
				break;             
			case EH:                
				root->bf = RH;                 
				taller = true;                 
				break;             
			case RH:                 
				RightBalance(p_root);                 
				taller = false;                 
				break;             
			}         
		}         
		return 0;     
	} 
} 

//給你一個接點排好序的算法:假說左孩子小于等于根接點,右孩子大于等于根接點 
//刪除當前接點,1)當前結點的左孩子為空,右孩子移到當前接點的位置。 
//              2)當前結點的右孩為空,左孩子移到當前接點的位置。 
//              3)當前結點左右孩子都為空,當前位置改為空。 
//              4)當前結點左右孩子都不為空,左子樹接點是小于父接點,所有的右子樹大于父接點,
//         現在刪除的正好是左右子樹的父接點,那么左子樹中,肯定是左子樹的最右孩子排在右子樹
//         的根前面,那么先把左子樹的根連接到當前刪除的接點位置,再找到左子樹的最右孩子,把
//         當前接點的右子樹的根連接上去就是這些了
template<class T> int CBTree<T>::DeleteAVL(node<T> **p_root, T key,node<T> **p_keyparentpos, bool &lower)
{
	node<T> *root = *p_root;
	if(!root)
	{
		return -1;
	}
	
	if(key == root->data)
	{
		node<T> *lnext = root->lnext;
		node<T> *rnext = root->rnext;
		delete root;
		root = *p_root = NULL;
		return 0;
	}
	else if(key < root->data)
	{
		//Go on searching...
		if(-1 == DeleteAVL(&root->lnext, key, p_keyparentpos, lower))
		{
			return -1;
		}

		if(lower)
		{
			switch(root->bf)
			{
			case(LH):
				root->bf = EH;
				lower = false;
				break;
			case(EH):
				root->bf = RH;
				lower = true;
				break;
			case(RH):
				LeftBalance(p_root);
				lower = false;
				break;
			}
		}

		return 0;
	}
	else
	{
		//Go on searching...
		if(-1 == DeleteAVL(&root->rnext, key, p_keyparentpos, lower))
		{
			return -1;
		}

		if(lower)
		{
			switch(root->bf)
			{
			case(LH):
				LeftBalance(p_root);
				lower = false;
				break;
			case(EH):
				root->bf = LH;
				lower = true;
				break;
			case(RH):
				root->bf = EH;
				lower = false;
				break;
			}
		}
		return 0;
	}
}

/*int main(int argc, char* argv[])
{
	printf("Hello World!\n");
	
	CBTree<int> bt;
	node<int> *root = NULL;     
	//int a[] = { 16, 3, 7, 11, 9, 26, 18, 14, 15 };    
	int a[] = { 1,30,2,29,3};
	
	void output(node<int> *, int);         
	int i;
	bool taller;     
	node<int> *position;     
	for (i=0; i<5; i++) 
	{         
		bt.InsertAVL(&root, a[i], &position, taller);                 
		printf("insert %d...\n", a[i]);         
		output(root, 0);         
		printf("|\n");     
	}  
	
	for(i = 4; i >= 0; i--)
	{
		bt.DeleteAVL(&root, a[i], &position, taller);
		printf("delete %d...\n", a[i]);         
		output(root, 0);         
		printf("|\n"); 
	}
	return 0; 
}

void output(node<int> *root, int floor) 
{     
	int i;         
	if (root == NULL) 
		return;     
	for (i=0; i<10; i++) 
	{         
		if (i < floor) 
		{             
			printf("    ");         
		}         
		else if (i == floor) 
		{             
			printf("%3d", root->data);         
		}         
		else 
		{             
			printf("====");         
		}     
	}     
	printf("\n");         
	output(root->lnext, floor + 1);     
	output(root->rnext, floor + 1); 
}*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品乱码久久久久久久久 | 欧美三级电影在线观看| av电影在线观看一区| 色综合久久88色综合天天 | 亚洲欧洲美洲综合色网| 亚洲一区在线免费观看| 蜜桃久久久久久久| www.久久精品| 91精品国产综合久久国产大片 | 亚洲在线观看免费视频| 看国产成人h片视频| 99久久伊人精品| 日韩视频一区二区三区在线播放| 日韩美女在线视频| 久久久久久**毛片大全| 亚洲免费观看高清完整版在线观看 | 欧美日韩中文精品| 久久美女高清视频| 日韩精品福利网| 国产乱人伦偷精品视频不卡| 色婷婷激情一区二区三区| 精品福利在线导航| 亚洲一区二区欧美日韩| 精品制服美女久久| 在线日韩av片| 国产精品电影一区二区三区| 日韩电影一区二区三区| 色婷婷久久久久swag精品| 久久免费视频色| 性感美女极品91精品| 91视频.com| 久久久噜噜噜久噜久久综合| 亚洲狠狠爱一区二区三区| eeuss鲁片一区二区三区| 欧美精品一区二区久久婷婷| 亚洲天堂网中文字| 国产精品1024| 日韩区在线观看| 图片区小说区国产精品视频| 在线观看精品一区| 亚洲欧美一区二区不卡| 成人午夜av电影| 精品国产网站在线观看| 奇米四色…亚洲| 欧美一区二区大片| 日本在线观看不卡视频| 欧美军同video69gay| 亚洲国产精品视频| 欧美性猛交xxxx黑人交| 中文字幕一区av| 99麻豆久久久国产精品免费| 国产欧美视频一区二区| 国产精品一品视频| 久久久高清一区二区三区| 国产中文字幕一区| 日韩一区二区中文字幕| 免费成人美女在线观看| 日韩午夜激情视频| 麻豆精品一二三| 欧美va亚洲va国产综合| 激情六月婷婷久久| 国产欧美精品在线观看| 精品一区精品二区高清| www一区二区| 99视频精品在线| 亚洲一区二区三区四区在线免费观看| 99国产精品久久久久久久久久久| 中文字幕在线不卡一区二区三区| 91丨国产丨九色丨pron| 一区二区三区四区av| 欧美精品精品一区| 极品少妇一区二区三区精品视频| 久久久久久久久久久久电影| 成人av电影在线| 日本特黄久久久高潮| 中文字幕亚洲视频| 精品久久久久久最新网址| 91蜜桃免费观看视频| 精品在线免费观看| 亚洲永久免费视频| 亚洲国产精品黑人久久久| 在线成人免费视频| 99免费精品在线观看| 韩国在线一区二区| 视频一区中文字幕国产| 亚洲色图色小说| 精品久久人人做人人爽| 欧美精品在线视频| 91福利精品第一导航| www.日韩av| 国产成人av一区二区三区在线| 午夜视频久久久久久| 亚洲免费成人av| 国产精品日韩成人| 久久精品欧美一区二区三区麻豆| 欧美精品一二三| 欧美亚一区二区| 99re热视频这里只精品| 国产美女精品一区二区三区| 麻豆91精品91久久久的内涵| 亚洲国产视频a| 一区2区3区在线看| 亚洲免费观看在线观看| 亚洲你懂的在线视频| 国产精品九色蝌蚪自拍| 久久精品欧美日韩| 久久蜜桃av一区精品变态类天堂 | 亚洲欧美日韩在线播放| 一色屋精品亚洲香蕉网站| 中文字幕av一区 二区| 国产午夜精品久久| 国产午夜精品理论片a级大结局| 精品国产伦理网| 日韩一级高清毛片| 日韩西西人体444www| 欧美一区二区二区| 欧美电影免费观看高清完整版在线 | 奇米在线7777在线精品| 麻豆视频一区二区| 国产伦精品一区二区三区视频青涩| 老司机免费视频一区二区三区| 久久99深爱久久99精品| 国产自产高清不卡| 99久久婷婷国产综合精品| 99视频超级精品| 在线免费不卡电影| 欧美日本一区二区三区| 欧美一区二区三区男人的天堂| 日韩欧美国产综合在线一区二区三区| 日韩三级中文字幕| 国产三级一区二区| 亚洲视频狠狠干| 五月天久久比比资源色| 五月婷婷综合在线| 久久99久久久久| 高清av一区二区| 色噜噜狠狠一区二区三区果冻| 欧美色手机在线观看| 日韩免费观看高清完整版在线观看| 久久综合久色欧美综合狠狠| 国产精品国产a| 天涯成人国产亚洲精品一区av| 国产一区二区免费在线| 99re视频精品| 91精品国产入口在线| 国产欧美日韩另类一区| 亚洲一卡二卡三卡四卡无卡久久| 奇米777欧美一区二区| 成人精品高清在线| 3d动漫精品啪啪| 国产精品短视频| 日韩成人精品在线观看| 成人福利视频在线| 91精品国产乱码| 自拍偷在线精品自拍偷无码专区 | 亚洲最新视频在线播放| 日本视频在线一区| 91精品国产色综合久久久蜜香臀| 久久久噜噜噜久久人人看| 亚洲激情综合网| 国产精品一区免费在线观看| 欧美午夜寂寞影院| 中文字幕av一区二区三区免费看| 午夜激情一区二区三区| 国产超碰在线一区| 日韩免费在线观看| 日日摸夜夜添夜夜添亚洲女人| 高清日韩电视剧大全免费| 91精品国产色综合久久ai换脸 | 久久一日本道色综合| 亚洲国产sm捆绑调教视频| 国产99精品视频| 日韩欧美成人激情| 亚洲成在线观看| 91福利在线播放| 国产精品久久久一本精品| 久久精品国产精品亚洲精品| 欧美视频一区二区三区| 最新中文字幕一区二区三区| 国产一区二区三区在线观看精品 | 亚洲日韩欧美一区二区在线| 国产福利一区二区三区视频在线 | 日韩色在线观看| 亚洲精品视频在线观看免费 | 久久成人羞羞网站| 9191国产精品| 亚洲va欧美va人人爽| 欧美三级日韩三级国产三级| **性色生活片久久毛片| www..com久久爱| 中国色在线观看另类| 国产999精品久久久久久| 久久久久久久网| 国产成人日日夜夜| 国产日韩精品一区二区三区在线| 欧美日韩一区二区三区四区| 亚洲素人一区二区| 91视视频在线观看入口直接观看www | 亚洲美女少妇撒尿| 日本精品免费观看高清观看|