C++学习之二叉树算法实现
2014-03-29 22:22
381 查看
#include <iostream> using namespace std; //1、创建一个Node节点,包含左右节点的指针和当前节点的数据 typedef char T; class bst{ struct Node{ T data; Node * L; Node * R; Node(const T & data):data(data),L(),R(){} Node(const T & data,Node * l,Node * r):data(data),L(l),R(r){} }; typedef Node * tree; //构造的类包含 根节点和总的层数 Node * rp; int n; public: //构造方法 bst():rp(),n(){} void clear(){clear(rp);n=0;} ~bst(){clear();} //循环打印 void travel(){travel(rp);cout<<endl;}; void insert(const T& p){//增加的方法 采用const修饰则,引用指针 重在了insert方法, insert(rp,new Node(p)); ++n; } int size()const{ return n; } void update(const T& oldData,const T& newData){ if(remove(oldData)) insert(newData); } //查找,输入一个字符,返回地址 tree& find(const T & d){ return find(rp,d); } //删除一个字符 bool remove(const T& d){ //先查找是否存在保存该信息 的节点 tree& t = find(d); if(t == NULL) return false; Node *p = t; //如果找到,将左节点插入右节点 if(t->L != NULL) insert(t->R,t->L); t = t->R;//原来指向d的指针指向t——R delete p;//将存储d的空间清空,与上一步顺序不能颠倒 --n; return true; } tree& find(tree& p,const T &d){ if(p == NULL) return p; if(d == p->data) return p; if(d<p->data) return find(p->L,d); if(d>p->data) return find(p->R,d); } void clear(tree & rp){ if(rp != NULL){ clear(rp->L); clear(rp->R); delete rp; rp = NULL; } } void travel(tree & rp){ if(rp != NULL){ travel(rp->L); cout<<rp->data<<endl; travel(rp->R); } } void insert(tree& rp,Node *p){//引用rp new Node 返回地址所以 Node *p if(rp == NULL) //因为rp和p都是指针地址 rp = p; else if(rp->data<p->data)//递归调用 insert(rp->R,p); else insert(rp->L,p); } }; int main(int argc,char *argv[]){ bst b; b.insert('c'); b.insert('a'); b.insert('d'); b.travel(); cout<<b.find('a')->data<<endl; // delete test cout<<"#######"<<endl; b.remove('a'); b.travel(); cout<<"#######"<<endl; b.update('c','e'); b.travel(); return 0; }
相关文章推荐
- 各种排序算法学习整理 C++实现
- c++学习笔记(7)——关于类的实现(以vector为例)
- [学习操练]C++智能指针类的简单实现(类模板实现)
- 设计模式学习(C++实现)2——抽象工厂模式
- 【学习C++】学习C++ -> 类(Classes)的定义与实现
- 算法学习 - 选择排序的稳定性讨论(C++实现)
- C++进阶学习——单向链表的实现
- C++模板学习之单链表的实现
- [C++学习历程]中级部分 OpenGL第一个例子实现
- C++学习day11之string自实现
- 一个Windows C++的线程类实现(封装API,形成一个类,但不完善。其实可以学习一下Delphi的TThread的写法)
- 学习笔记-多项式的加减乘数及微分的C++实现15/11/02
- C/C++实现微信跳一跳辅助(学习纪录)
- 小波学习之一(单层一维离散小波变换DWT的Mallat算法C++和MATLAB实现)
- [COM Interop学习小结]实现一个C#调用C++的示例
- nginx源码学习3——定时器c++实现
- C++学习笔记(四)指针实现的链表、堆栈、队列、二叉查找树
- 经典算法学习————快速排序算法的c++实现
- 数据结构与算法学习 第1季02 链表的基本功能 C++实现
- C++学习 【4.1】 利用函数实现指定的功能---函数,函数的形式,函数参数