当前位置:  编程技术>c/c++/嵌入式

c++实现二叉查找树示例

    来源: 互联网  发布时间:2014-10-24

    本文导语:  代码如下:/** 实现二叉查找树的基本功能*/ #include #include #include #include #include using namespace std; const int M = 10000; //定义数据节点class dNode{public: string name; int age; bool sex; dNode(){  age = 0;  name = "no name";  sex = true;//nan } dNode(str...

代码如下:

/**
 实现二叉查找树的基本功能
*/

#include
#include
#include
#include
#include

using namespace std;

const int M = 10000;

//定义数据节点
class dNode{
public:
 string name;
 int age;
 bool sex;
 dNode(){
  age = 0;
  name = "no name";
  sex = true;//nan
 }
 dNode(string name, int age, bool sex):name(name), age(age), sex(sex){}
 //打印节点
 void show(){
  cout left, data)->parent = cur;
 }else if(cur->data < data){
  bst::insert(cur->right, data)->parent = cur;
 }
}
bstNode * bst::search(bstNode *cur, dNode data){
 if(NULL == cur){
  return NULL;
 }else if(cur->data == data){
  return cur;
 }else if(cur->data > data){
  return cur->left;
 }else if(cur->data < data){
  return cur->right;
 }
}
void bst::pre_raversal(bstNode *cur){
 if(NULL == cur)
  return;
 bst::pre_raversal(cur->left);
 cout right);
}
bstNode * bst::minNode(bstNode *cur){
 if(NULL == cur){
  return NULL; //如果根节点是空,就返回空
 }else{
  if(NULL != cur->left){
   return minNode(cur->left);
  }
 }
}
/**
* 非递归
* 后继就是比cur节点刚好大一点儿的节点A(排序之后),那么思
* 路就是找cur节点的右子树中的最小值或者是在cur的祖先中找到第一个比刚好大一点儿的那个节点
* ***找到A有两种情况:
* 1.cur节点有右子树,那么就找右子树的最小值节点就好了
* 2.cur节点没有右子树,那么一级一级的向祖先找,直到某个祖先节点A满足,
*   A的左孩子是cur的祖先,因为当A的左孩子是cur祖先就说明查找路线在想右
*   偏了,之前一直是往左边偏
*/
bstNode * bst::succNode(bstNode *cur){
 if(NULL != cur->right){
  return minNode(cur);
 }
 bstNode * parentNode = cur->parent;
 while(NULL != parentNode && parentNode->right == cur){
  cur = parentNode;
  parentNode = parentNode->parent;
 }
 return parentNode;
}

/**
*
* 删除c节点,这个是最难的
* 规定:要删除的节点是c, c的父节点是p, c的后继是s,c的左孩子是l,有孩子是r
* 删除c整个节点(不是count-1)分三种情况
* 1. c节点没有孩子,直接删除
* 2. c节点有一个孩子,那么直接将孩子节点(l或r)指向c的父节点p(p也要执行l或r)
* 3. c有两个孩子,那么需要用后继节s点里面的数据掉替换c节点里面的数据,然后再删除s节点
*    同时需要将s父子之间的指向关系处理好
*/
void bst::_del(bstNode * cur, bstNode *delNode){
 if(NULL == delNode->left || NULL == delNode->right){
  //待续
 }
}

/**
*接口:
*跟count有关的删除
*/
bstNode * bst::del(bstNode *cur, dNode data){
 //先找到需要删除的节点
 bstNode * delNode = this->search(cur, data);
 if(NULL == delNode) //没有找到该节点,无需删除
  return NULL;
 if(delNode->count == 1){
  _del(this->root, delNode);
 }else{
  delNode->count--;
 }
}

int main(){
 bst *root = new bst();
 //构造50个人, 重复的虽然在树中不会重复插入,但是会被计数
 int num = 50;
 for(int i = 0; i < num; i++){
  dNode * newData = new dNode("Luo", rand() % 15, rand() % 2);
  root->insert(root->root, *newData);
 }
 //前序遍历
 root->pre_raversal(root->root);

 bstNode *searchNode = root->search(root->root, *new dNode("Luo", 3, 1));
 cout


    
 
 

您可能感兴趣的文章:

  • Base64编码原理详解及c++编码解码实现
  • 我实现了个J2EE技术的服务器,支持TCP、UDP和数据库,由于性能的原因,需要改为C或C++实现,我是C、C++新手,我该如何入手呢?看什么样的
  • c++实现MD5算法代码示例
  • java 与 C++ 实现后绑定的方法
  • c++通用模板类(template class)定义实现详细介绍
  • Qt实现的C++框架 qtioccontainer
  • 用C或C++实现主存的分配与回收
  • 在linux系统上,如何用C++实现获取和设置系统时间?
  • 文本压缩算法C++实现 Golden Huffman
  • C++标准库实现 libc++
  • C++的XMLRPC实现 XMLRPC++
  • Java/JavaScript API 的 C++ 实现 libj
  • c++ 连接两个字符串实现代码 实现类似strcat功能
  • c++在unix中如何实现CString的方法?或者说有没有替换CString的类?
  • 请问:java中如何实现C++中的sizeof()方法?
  • 用C或C++编程,模拟可变分区存储管理且首次适应的算法实现存储器的分配与回收
  • vim中如何实现c++代码编写的自动格式化和语法高亮的功能?
  • C++实现CreatThread函数主线程与工作线程交互的方法
  • 请教为什么在C++编译通过并实现的程序,在linux下就会出错
  • linux下c++怎样实现回调(CALLBACK)函数?
  • 在linux下如何用c++实现建立一个文件夹
  • 基于DIV+ul+li实现的表格(多示例)
  • python实现绘制树枝简单示例
  • c语言实现MD5算法完整代码示例
  • ThinkPHP实现事务回滚示例代码
  • 使用libpcap实现抓包程序的步骤及代码示例
  • 修改.htaccess实现301域名重定向示例分享
  • java Servlet实现Session创建存取以及url重写代码示例
  • php实现数组筛选奇数和偶数示例
  • 数据结构:图(有向图,无向图),在Python中的表示和实现代码示例
  • python实现倒计时的示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • HASH查找的程序实现及性能分析
  • find命令怎么用能够实现不递归查找子目录?
  • linux下grep命令实现查找多个关键字(与关系和或关系)
  • 在linux实现在任意给定的目录查找文需要的件的程序? 下面的实现思路可不可以呢????
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • 如何用find实现查找并copy
  • linux下如何实现文件内容得查找替换
  • 请教在文本文件中查找一字符串并定位流的位置,如何实现较快?
  • 谁用过ejb 进行模糊查询???语句怎么写???能实现根据中间的字符串进行模糊查找么?
  • 在JSP中,我想查找本机指定目录下的一个文件,怎么来实现呢?
  • jquery iis7站长之家
  • C# 递归查找树状目录实现方法
  • mysql实现根据多个字段查找和置顶功能
  • 在JAVA中如何实现在一个长字符串查找某个字符串??
  • Linux中如何查找函数的实现
  • linux下编写shell实现 find查找文件命令
  • python 查找文件夹下所有文件 实现代码
  • WinForm自定义函数FindControl实现按名称查找控件
  • WinForm实现按名称递归查找控件的方法
  • ejb中的实体bean要不要实现查找方法 “select * from name where name='name'"
  • php二分查找二种实现示例
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • 通过javascript库JQuery实现页面跳转功能代码
  • 怎么用Jsp实现在页面实现树型结构?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • php实现socket实现客户端和服务端数据通信源代码
  • 网站重定向用C语言实现iptables,ACL实现




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3