资源简介
定义二叉搜索树类,封装查找、插入、删除操作;
代码片段和文件信息
#include
using namespace std;
template
class BinaryTreeNode
{
public:
T element;
BinaryTreeNode *leftChild;
BinaryTreeNode *rightChild;
BinaryTreeNode() {}
~BinaryTreeNode()
{
if (leftChild) delete leftChild;
if (rightChild) delete rightChild;
}
};
template
void create(BinaryTreeNode** root)
{
T temp;
cin >> temp;
if (temp == 0)
{
*root = NULL;
}
else {
*root = new BinaryTreeNode;
(*root)->element = temp;
create(&((*root)->leftChild));
create(&((*root)->rightChild));
}
}
int flag = 0;
template
BinaryTreeNode* search(BinaryTreeNode*rootT key)
{
BinaryTreeNode* current = root;
while ((NULL) != root && (key != current->element))
{
current = (key < current->element ? search(current->leftChild key) : search(current->rightChild key));
if (current == NULL)break;
}
return current;
}
template
BinaryTreeNode* getParent(BinaryTreeNode*root BinaryTreeNode*current)
{
BinaryTreeNode*temp = root;
BinaryTreeNode*temp2 = root;
while (temp)
{
if (current->element > temp->element)
{
temp2 = temp;
temp = temp->rightChild;
}
if (current->element < temp->element)
{
temp2 = temp;
temp = temp->leftChild;
}
if (current->element == temp->element)
{
return temp2;
}
}
return NULL;
}
template
void insertNode(BinaryTreeNode*rootconst T &value)
{
BinaryTreeNode*p = root *prev = NULL;
while (p!=NULL)
{
prev = p;
if (p->element < value)
p = p->rightChild;
else
p = p->leftChild;
}
if (root == NULL)
{
root = new BinaryTreeNode;
root->element = value;
}
else if (prev->element < value)
{
prev->rightChild = new BinaryTreeNode;
prev->rightChild->element = value;
}
else {
prev->leftChild = new BinaryTreeNode;
prev->leftChild->element = value;
}
}
template
void deleteNode(BinaryTreeNode*rootconst T &value)
{
BinaryTreeNode*node=search(rootvalue);
if (node == NULL)
{
cout << “没有这个元素“ << endl;
}
if (value == root->element)
{
BinaryTreeNode*temp = root->leftChild;
while (temp->rightChild != NULL)
{
temp = temp->rightChild;
}
BinaryTreeNode*temp2 = getParent(roottemp);
root->element = temp->element;
temp2->rightChild = temp->leftChild;
}
else
{
BinaryTreeNode*prevNode = getParent(root node);//删除结点前一节点
int flag = 0;
if (prevNode->leftChild == node)
flag = 1;
BinaryTreeNode*tmp = nod
- 上一篇:C语言 车辆出租管理系统
- 下一篇:北京地铁最短路径.rar
相关资源
- 数据结构C语言 一元多项式的加减法
- Qt/C++ 网站爬虫源码
- 数据结构 走迷宫大作业 c语言完整代
- 图像处理-读取bmp图像均值滤波-C++
- 图的建立与遍历c++实现邻接矩阵存储
- 骑士周游列国(跳马问题)C++代码实
- VC++ 使用RSA算法防止非法注册机破解软
- VC++开发GIS系统代码陈建春书
- shallow water equation c++ code
- C++实现小型数据库DBMS,具备建表以及
- 模拟的DBMS
- 实现用c++产生高斯噪声
- c++远程控制源代码
- 自己写的远控代码 C++
- C++课程设计公司人员管理系统
- C++程序设计 Y.Daniel Liang著 习题答案
- 纯C++方式生成复杂格式的excel文件(
- 马踏棋盘的源程序,C语言编写,数据
- 清华大学C++课件
- g711音频编解码(C/C++)实现
- VC++ MFC MSCOMM VS2010 手把手学会串口收发
- C++ 家庭理财管理系统
- 基于VisualC++ 6.0的服装试穿管理系统
- 64bit linux libstdc++.so.6.0.10
- VC++解析并显示JPEG图片showjpeg.rar
- C++写的车辆信息管理系统
- 学生选课管理系统C++
- 面向对象C++笔记
- vc++能够显示网页html
- C++屏幕抓屏软件源代码
评论
共有 条评论