资源简介
使用C++模版写的二叉树,适用于C++数据结构的学习参考。
代码片段和文件信息
#include
using namespace std;
template
class TreeNode
{
public:
TreeNode():lson(NULL)rson(NULL)freq(1){}
T data;
unsigned int freq;
TreeNode *lson;
TreeNode *rson;
};
template
class BST
{
private:
TreeNode* root;//根节点
void insertpri(TreeNode* &nodeT x);//插入
TreeNode* findpri(TreeNode* nodeT x);//查找
void insubtree(TreeNode* node);//中序遍历
void Deletepri(TreeNode* &nodeT x);//删除
public:
BST():root(NULL){}//BST构造函数
void insert(T x);//插入接口
TreeNode* find(T x);//查找接口
void Delete(T x);//删除接口
void traversal();//遍历接口
};
/*插入*/
template
void BST::insertpri(TreeNode* &nodeT x)
{
if(node == NULL)
{
node = new TreeNode;
node->data = x;
return;
}
if(node->data>x)
{
insertpri(node->lsonx);
}
else if(node->data {
insertpri(node->rsonx);
}
else
{
++(node->freq);
}
}
/*插入接口*/
template
void BST::insert(T x)
{
insertpri(rootx);
}
/*查找*/
template
TreeNode* BST::findpri(TreeNode* nodeT x)
{
if(node == NULL)
{
return NULL;
}
if(node->data>x)
{
return findpri(node->lsonx);
}
else if(node->data {
return findpri(node->rsonx);
}
else
{
return node;
}
}
/*查找接口*/
template
TreeNode* BST::find(T x)
{
return findpri(rootx);
}
/*删除---相当复杂考虑的要比较的全面*/
template
void BST::Deletepri(TreeNode* &nodeT x)
{
if(node == NULL)//没有找到节点
{
return;
}
if(node->data>x)//如果x小于节点的值,就继续在节点的左子树中删除
{
Deletepri(node->lsonx);
}
else if(node->data {
Deletepri(node->rsonx);
}
else//如果节点相等
{
if(node->lson&&node->rson)//此节点右两个儿子
{
TreeNode* temp = node->rson;//temp指向节点的右儿子
while(temp->lson!=NULL)//找到右子树中最小的节点
{
temp = temp->lson;
}
node->data = temp->data;//把右子树中最小的节点赋值给本节点
node->freq = temp->freq;
Deletepri(node->rsontemp->data);//删除右子树中最小值的节点
}
else//此节点右1个或0个儿子
{
TreeNode* temp = node;
if(node->lson == NULL)
{
node = node->rson;
}
else if(node->rson == NULL)
{
node = node->lson;
}
delete(temp);
}
}
return;
}
/*删除接口*/
template
void BST::Delete(T x)
{
Deletepri(rootx);
}
template
void BST::insubtree(TreeNode* node)
{
if(node == NULL)
{
return;
}
insubtree(node->lson);
cout<data<<“ “;
insubtree(node->rson);
}
template
void BST::traversal()
{
insubtree(root);
}
int main()
{
BST bb;
bb.insert(6);
bb.insert(2);
bb.insert(7);
bb.insert(1);
bb.insert(4);
bb.insert(3);
bb.traversal();
cout< TreeNode *tree;
tree = bb.find(6);
cout<<“data=“<data< cout<<“freq=“<freq< bb.Delete(2);
bb.traversal();
cout< }
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3104 2013-02-21 19:56 bst.cpp
----------- --------- ---------- ----- ----
3104 1
- 上一篇:c语言写成的取x.509证书公钥
- 下一篇:ZBAR官方开源二维码识别库
相关资源
- 按层次输出二叉树
- 最小生成树 数据结构
- 邓俊辉数据结构c++版视频资源全集
- 北邮计算机院数据结构课程大作业:
- 数据结构 迷宫问题 C++ 栈方法
- 数据结构 用哈希表做的通讯录
- 教学计划编制系统-数据结构课设源代
- 文章编辑系统含源代码
- 多关键字排序C语言
- 二叉树的前序中序后序遍历代码
- 数据结构 严蔚敏 C语言版 括号匹配
- 链表的归并 数据结构 C语言实现
- 数据结构算法与应用--C++语言描述(代
- 数据结构 银行排队系统
- 耿国华《数据结构》第二版C语言描述
- 个人电话号码查询系统
- 数据结构算法与应用--C++语言描述(代
- C语言实现连连看游戏
- 学生成绩查询系统c语言
- C语言 实现 家族谱 树结构
- Dijstra和Floyd算法
- 数据结构课程设计散列表的设计与实
- 数据结构与算法分析(c语言版本)习
- 数据结构与算法分析C语言描述第二版
- 数据结构 C++语言描述——应用
- 数据结构实验-哈夫曼编码C语言实现实
- 北邮信通院数据结构实验_哈夫曼树
- 大话数据结构C++
- 数据结构(C语言第二版)答案-严蔚敏
- c语言电子书.txt
评论
共有 条评论