中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > C/C++
二叉排序
作者:未知 时间:2005-09-13 23:28 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:二叉排序
12345678910

二叉排序树 ////////////////////////////////////////////////////////////////////////// // File: btree_sort.h // Author: centaurus ////////////////////////////////////////////////////////////////////////// #ifndef __BTREE_SORT_H__ #define __BTREE_SORT_H__ #include using namespace std; int a[10] = {5, 6, 4, 7, 3, 9, 2, 10, 8, 1}; const int SIZE = 10; template class BTreeSort { private: typedef struct BTreeNode { T value; struct BTreeNode *lchild; struct BTreeNode *rchild; }BTreeNode; typedef enum Flag { HEAD, LCHILD, RCHILD }Flag; BTreeNode *head; int node_num; bool Search(BTreeNode *node, T v, BTreeNode *front, BTreeNode **front_store, Flag flag, Flag *flag_store); void PreOrderTraverse(BTreeNode *head); public: BTreeSort(); ~BTreeSort(); void Add(int v); void Show(); void Del(int v); }; template bool BTreeSort::Search(BTreeNode *node, T v, BTreeNode *front, BTreeNode **front_store, Flag flag, Flag *flag_store) { if(node == NULL) { *flag_store = flag; *front_store = front; return false; } if(node->value == v) { *flag_store = flag; *front_store = front; return true; } if(v > node->value) return Search(node->rchild, v, node, front_store, RCHILD, flag_store); else return Search(node->lchild, v, node, front_store, LCHILD, flag_store); } template BTreeSort::BTreeSort() { head = NULL; node_num = 0; for(int i = 0; i < SIZE; i++) { Add(a[i]); } } template void BTreeSort::Add(int v) { BTreeNode *fstore = NULL; Flag f = HEAD; if(Search(head, v, NULL, &fstore, HEAD, &f)==false) { if(f == HEAD) { head = new BTreeNode; head->value = v; head->lchild = head->rchild = NULL; node_num++; } else { if(f == RCHILD) { fstore->rchild = new BTreeNode; fstore->rchild->value = v; fstore = fstore->rchild; fstore->lchild = fstore->rchild = NULL; } else { fstore->lchild = new BTreeNode; fstore->lchild->value = v; fstore = fstore->lchild; fstore->lchild = fstore->rchild = NULL; } node_num++; } } } template void BTreeSort::PreOrderTraverse(BTreeNode *head) { if(head != NULL) { cout << head->value << endl; PreOrderTraverse(head->lchild); PreOrderTraverse(head->rchild); } return; } template void BTreeSort::Show() { cout << "NodeNum:" << node_num << endl; cout << "PreOrderShow:" << endl; PreOrderTraverse(head); } template void BTreeSort::Del(int v) { BTreeNode *fstore = NULL; BTreeNode *del_node = NULL; BTreeNode *p = NULL; Flag f = HEAD; if(Search(head, v, NULL, &fstore, HEAD, &f) == true) { if(f == LCHILD) { del_node = fstore->lchild; } else if(f == RCHILD) { del_node = fstore->rchild; } else { del_node = head; } if(del_node->lchild == NULL && del_node->rchild != NULL) { if(f == LCHILD) { fstore->lchild = del_node->rchild; } else if(f == RCHILD) { fstore->rchild = del_node->rchild; } else { head = del_node->rchild; } cout << del_node->value << endl; delete del_node; } else if(del_node->lchild != NULL && del_node->rchild == NULL) { if(f == LCHILD) { fstore->lchild = del_node->lchild; } else if(f == RCHILD) { fstore->rchild = del_node->lchild; } else { head = del_node->lchild; } cout << del_node->value << endl; delete del_node; } else if(del_node->lchild != NULL && del_node->rchild != NULL) { p = del_node->lchild; fstore = del_node; cout << del_node->value << endl; while(p->rchild != NULL) { fstore = p; p = p->rchild; } if(p != del_node->lchild) { del_node->value = p->value; fstore->rchild = p->lchild; } else { del_node->value = p->value; del_node->lchild = p->lchild; } delete p; } else //无左右子树 { if(f == LCHILD) fstore->lchild = NULL; else if(f == RCHILD) fstore->rchild = NULL; else head = NULL; cout << del_node->value << endl; delete del_node; } node_num--; } } template BTreeSort::~BTreeSort() { cout << "DeleteOrder:" << endl; for(int i = 0; i < SIZE; i++) { Del(a[i]); } } #endif ////////////////////////////////////////////////////////////////////////// // File: btree_sort.h // Author: centaurus ////////////////////////////////////////////////////////////////////////// #include using namespace std; #include "btree_sort.h" void main() { BTreeSort test; test.Show(); }

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有