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

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

?? binarytree.c

?? 二進(jìn)制查找樹實(shí)現(xiàn)代碼
?? C
字號(hào):
// BinaryTree.c// file is the implementation of a binary search tree.#include <stdlib.h> // for malloc#include "BinaryTree.h"// Defines #define TRUE 1#define FALSE 0typedef struct Node{   Item item;   Key key;   struct Node *left;   // if left == NULL , it means it has no left son   struct Node *right;   // if right == NULL , it means it has no right son} *ptrNode;struct tree{   ptrNode root;};int succ;//helper functionsstatic BOOL delNode(Tree tree, Key key);static ptrNode find_parent(ptrNode root, Key key);static ptrNode find_succ(ptrNode root);static ptrNode find_small(ptrNode root);static void DestoryTree(Tree tree);// ---------------------------------------------------------static ptrNode search(ptrNode subtree, Key key);static void traversePre(ptrNode subtree, PerItemFunc pFunc);static void traverseIn(ptrNode subtree,  PerItemFunc pFunc);static void traversePost(ptrNode subtree,PerItemFunc pFunc);void deleteTree(Tree tree){   DestoryTree(tree);}int deleteNode(Tree tree, Key key){   succ=delNode(tree,key);   return succ;}Tree CreateTree(){   return calloc(1,sizeof(struct tree));}Item *Find(Tree tree, Key key)// searches a node, given its key, in the tree and// returns the appropriate Item address.// returns NULL if it's not found{   ptrNode pNode = search(tree->root,key);   if (!pNode)      return NULL;   return &(pNode->item);}static ptrNode search(ptrNode root, Key key){   if (root)	 {      if (!EQ(key,root->key))         return root;												// we've found it      if (EQ(key,root->key) < ZERO)         return search(root->left, key);      else if (EQ(key,root->key) > ZERO)         return search(root->right, key);   }   return NULL;													// the sub-tree was empty}void traversePreOrder(Tree tree, PerItemFunc pFunc){   traversePre(tree->root, pFunc);}void traverseInOrder(Tree tree, PerItemFunc pFunc){   traverseIn(tree->root, pFunc);}void traversePostOrder(Tree tree, PerItemFunc pFunc){   traversePost(tree->root, pFunc);}static void traversePre(ptrNode root,                        PerItemFunc pFunc){   if (root) // if ptr is not NULL (i.e., there is a node)   {      pFunc(&root->item);      traversePre(root->left, pFunc);      traversePre(root->right, pFunc);   }}static void traverseIn(ptrNode root,                       PerItemFunc pFunc){   if (root) // if ptr is not NULL (i.e., there is a node)   {      traverseIn(root->left, pFunc);      pFunc(&root->item);      traverseIn(root->right, pFunc);   }}static void traversePost(ptrNode root,                         PerItemFunc pFunc){   if (root) // if ptr is not NULL (i.e., there is a node)   {      traversePost(root->left, pFunc);      traversePost(root->right, pFunc);      pFunc(&root->item);   }}void add(Tree tree, Key key, Item item){   ptrNode subtree;   //crate new node   ptrNode newNode = malloc(sizeof(struct Node));   if (!newNode)   {      ERROR();      return;   }		//fill it with data   newNode->key = key;   newNode->item = item;   newNode->left = newNode->right = NULL;   subtree = tree->root; //start from beginning   if (!tree->root) // Is it an empty tree?   {      tree->root = newNode;      return;   }		while (1)   {      if (EQ(key, subtree->key) < ZERO) // add to left sub-tree      {        if ( subtree->left == NULL )        {            subtree->left = newNode;            return;        }         subtree = subtree->left;      }     else //add to right sub-tree      {        if ( subtree->right == NULL )        {            subtree->right = newNode;            return;        }        subtree = subtree->right;      }   }}//===========================================================================// is a child of the recursion function find_succ() to find the// succsessor.//===========================================================================static ptrNode find_small(ptrNode root){	if(root)	{		if(root->left == NULL)		{			return root;		}		else		{			return find_small(root->left);		}	}	return NULL;}//===========================================================================// find succ of Item that we want delete//===========================================================================static ptrNode find_succ(ptrNode root){	return (root->right ? find_small(root->right) : NULL);}//===========================================================================// this function find in a recursion way the father// of the actually Item//===========================================================================static ptrNode find_parent(ptrNode root, Key key){	if(root)	{		if( (root->left != NULL && EQ(root->left->key, key) == ZERO ) ||				(root->right != NULL && EQ(root->right->key, key) == ZERO))		{			return root;		}		if(EQ(root->key, key) > ZERO)		{			return find_parent(root->left, key);		}		else if (EQ(root->key, key) < ZERO)		{			return find_parent(root->right, key);		}	}	return NULL;}//===========================================================================// is the main function to set all variables for the delete procedure.//===========================================================================static BOOL delNode(Tree tree, Key key){	ptrNode root = tree->root;	ptrNode pDel = NULL;	ptrNode father = NULL;	ptrNode succ = NULL;	ptrNode fsucc = NULL;	ptrNode tmp = NULL;	if (!tree->root)	{		return FALSE;	}	// find the spec. Item	pDel = search(root, key);	if (pDel == NULL)	{		return FALSE;	}	father = find_parent(root, key);	// if all our Nodes smaller then root	if ( root->right == NULL )	{		tree->root = pDel->left;		free(pDel);		return TRUE;	} // ups they are all greater!	else if ( root->left  == NULL )	{		tree->root = pDel->right;		free(pDel);		return TRUE;	}	if (pDel->left == NULL && pDel->right == NULL)	{		if (EQ(key,father->key) == ZERO_GREATER) //if the son is on the right of the father		{			father->right = NULL;		}		else //if it's on the left		{			father->left = NULL;		}	}	else if (pDel->left != NULL && pDel->right == NULL)	{		if (EQ(key,father->key) == ZERO_GREATER) //if the son is on the right of the father		{			father->right = pDel->left;		}		else //if it's on the left		{			father->left = pDel->left;		}	}	else //if pDel has two sons, or son on the right only	{		succ = find_succ(pDel);		fsucc = find_parent(root, succ->key);		if (EQ(root->key,key) == ZERO) //  the node to delete is the root of the tree		{			father = pDel;			succ = find_succ(pDel);			fsucc = find_parent(pDel,succ->key);			if (succ == pDel->right)			{				succ->right = succ->right;			}			else			{				succ->right = pDel->right;				fsucc->left = NULL;			}			succ->left  = pDel->left;			tree->root = succ;			free(pDel);			return TRUE;		}		else if (EQ(key,father->key) == 1)//if the son is on the right of the father		{			father->right = succ;		}		else //if it's on the left		{			father->left = succ;		}		tmp = pDel->left;		if(EQ(fsucc->key,pDel->key) == ZERO)		{			fsucc->left = NULL;			fsucc->right = NULL;		}		else		{			fsucc->left = succ->right;		}		//if the succesor is not the son of pDel		succ->left = tmp;		succ->right = pDel->right;	}	tmp = NULL;	free(pDel);	return TRUE;}static void DestoryTree(Tree tree){	while (find_small(tree->root))	{		delNode(tree,find_small(tree->root)->key);	}	free(tree);}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品日韩一| 日韩美女视频一区二区 | 黄色资源网久久资源365| 久久久久久**毛片大全| 久久91精品久久久久久秒播| 欧美经典一区二区三区| 欧美一区二区在线观看| 欧美丝袜自拍制服另类| 成人免费高清视频| 国产成人av一区二区三区在线| 五月婷婷综合在线| 夜夜嗨av一区二区三区中文字幕| 国产亚洲欧美日韩在线一区| 日韩一区二区不卡| 制服丝袜亚洲色图| 欧美精品久久一区| 91精品国产一区二区三区蜜臀| 欧美在线视频你懂得| 欧美亚洲日本国产| 欧美久久高跟鞋激| 日韩精品一区二区三区中文不卡 | 蜜桃一区二区三区在线观看| 日本成人在线一区| 捆绑紧缚一区二区三区视频 | 91精品国产欧美日韩| 欧美va亚洲va在线观看蝴蝶网| 日韩欧美一区中文| 国产欧美日韩视频在线观看| 成人欧美一区二区三区黑人麻豆 | 欧美视频一区二| 欧美一级生活片| 久久久亚洲精华液精华液精华液| 久久综合九色欧美综合狠狠| 国产精品白丝在线| 日本免费新一区视频| 成人精品免费视频| 欧美日韩成人高清| 国产亚洲短视频| 亚洲一区二区三区免费视频| 蜜臀av国产精品久久久久| 国产酒店精品激情| 色猫猫国产区一区二在线视频| 欧美日韩精品一区二区天天拍小说 | 久久久久久久综合日本| 亚洲精品成人天堂一二三| 精品制服美女久久| 成人av综合在线| 欧美一级艳片视频免费观看| 樱桃视频在线观看一区| 精品一区二区三区在线视频| 在线视频你懂得一区二区三区| 久久久综合精品| 日本美女一区二区三区| 91丨九色丨国产丨porny| 26uuu久久综合| 美女视频黄久久| 欧美日韩你懂得| 亚洲欧美一区二区三区久本道91 | 亚洲乱码一区二区三区在线观看| 精品一区二区在线视频| 在线成人免费视频| 免费成人av资源网| 欧美人伦禁忌dvd放荡欲情| 亚洲激情校园春色| 一本色道久久综合狠狠躁的推荐 | 国产三级精品三级在线专区| 久久se精品一区精品二区| 日韩精品一区二区三区四区| 免费观看91视频大全| 精品成人私密视频| 国产精品一区二区91| 国产精品麻豆99久久久久久| av亚洲精华国产精华精| 亚洲免费资源在线播放| 欧美性感一类影片在线播放| 亚洲第一av色| 日韩免费视频线观看| 国产精品白丝av| 国产精品国产三级国产专播品爱网 | 日本久久电影网| 婷婷开心久久网| 亚洲一区中文日韩| 日韩精品一区二区三区中文精品| 国产一区二区影院| 国产精品高潮久久久久无| 91影院在线观看| 视频在线观看一区| 亚洲国产高清在线观看视频| 91在线观看高清| 免费不卡在线视频| 国产精品午夜电影| 欧美日韩精品一区二区在线播放| 精品一区二区三区久久| 国产精品久久久久久久久久久免费看| 日本电影欧美片| 国产在线视视频有精品| 亚洲精品日日夜夜| 亚洲欧美激情一区二区| 91黄色小视频| 亚洲综合在线观看视频| 九九**精品视频免费播放| 欧美va在线播放| 国产日韩欧美综合一区| 国产日韩精品一区二区浪潮av | 91国内精品野花午夜精品| www.欧美亚洲| 欧美图片一区二区三区| 色综合天天综合网天天狠天天| 精品在线视频一区| 日本亚洲电影天堂| 午夜精品久久一牛影视| 亚洲日本免费电影| 日本一区二区三级电影在线观看| 欧美一区二区在线免费观看| 在线观看成人免费视频| a在线欧美一区| 高清免费成人av| 国产a精品视频| 国内外精品视频| 热久久久久久久| 免费高清在线一区| 亚洲成人激情av| 亚洲福利一区二区| 一区二区三区毛片| 亚洲激情图片qvod| 亚洲综合色噜噜狠狠| 亚洲激情图片一区| 亚洲午夜精品在线| 亚洲午夜电影网| 蜜臀久久99精品久久久画质超高清| 日韩国产精品久久久| 韩日欧美一区二区三区| 成人h动漫精品| 欧美日韩一区不卡| 国产精品久久久久久久久快鸭| 欧美高清在线一区| 日韩高清欧美激情| 99精品欧美一区二区三区小说 | 亚洲伊人伊色伊影伊综合网| 亚洲在线一区二区三区| 开心九九激情九九欧美日韩精美视频电影 | 成人免费观看男女羞羞视频| 欧洲另类一二三四区| 日韩视频在线一区二区| 日本一区二区视频在线| 日韩精品91亚洲二区在线观看 | 久久嫩草精品久久久精品一| 一区二区三区四区在线免费观看 | 亚洲激情男女视频| 国产专区欧美精品| 91精品视频网| 亚洲国产欧美在线| 国产99久久久久久免费看农村| 欧美日韩精品欧美日韩精品一综合| 亚洲国产精品99久久久久久久久 | 久久成人综合网| 欧美美女一区二区三区| 亚洲欧美日本在线| av在线不卡观看免费观看| 久久精品无码一区二区三区| 麻豆传媒一区二区三区| 欧美一区二区视频在线观看2022| 亚洲精品免费电影| 色综合激情五月| 国产精品护士白丝一区av| 国产91精品一区二区麻豆亚洲| 日韩一区二区在线观看| 久久爱www久久做| 久久精品亚洲国产奇米99| 成人黄页毛片网站| 亚洲免费视频中文字幕| 欧美午夜精品一区二区三区| 亚洲地区一二三色| 91精品久久久久久蜜臀| 国产成人精品www牛牛影视| 最新日韩在线视频| 制服丝袜亚洲色图| 国产精品亚洲午夜一区二区三区| 国产宾馆实践打屁股91| 亚洲精选在线视频| 精品久久久久久久久久久久包黑料| 成人激情视频网站| 日韩电影在线免费看| 久久精品一区二区| 欧美精品黑人性xxxx| 99久久精品国产一区二区三区 | 一区二区三区精品在线观看| 精品日韩一区二区三区| 色呦呦国产精品| 成人av手机在线观看| 国产精品一区二区无线| 午夜视黄欧洲亚洲| 亚洲精品精品亚洲| 国产欧美视频一区二区| 欧美变态凌虐bdsm| 欧美精品在线一区二区三区| 在线免费精品视频| 国产成人免费视频一区| 丝袜诱惑制服诱惑色一区在线观看| 久久精品亚洲精品国产欧美|