博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉排序树的c++实现,查找,删除等
阅读量:4186 次
发布时间:2019-05-26

本文共 1906 字,大约阅读时间需要 6 分钟。

二叉排序树的c++实现

完整代码和测试在我的github:

#pragma oncetemplate 
struct BSTNode{ T m_nValue; BSTNode *m_pLeft; BSTNode *m_pRight;};template
class BST{public: BST(T r[],int n); void InsertBST(BSTNode
*&R, BSTNode
*s);//插入数据在BST,R根结点,插入结点s BSTNode
*Search(BSTNode
*r, T key); bool DeleteBST(BSTNode
*&R, T key);//删除key void Delete(BSTNode
*&R); BSTNode
* GetpRoot();private: BSTNode
*root;};template
void BST
::InsertBST(BSTNode
*&R, BSTNode
*s){ if (R == nullptr) R = s;//R为空,将s直接插入 else if (s->m_nValue < R->m_nValue) InsertBST(R->m_pLeft, s);//递归向左子树中插入 else InsertBST(R->m_pRight, s);}//构造BST的过程即是一个反复插入的过程template
BST
::BST(T r[], int n){ root = nullptr; for (size_t i = 0; i < n; i++) { BSTNode
*s = new BSTNode
; s->m_nValue = r[i]; s->m_pLeft= nullptr; s->m_pRight = nullptr; InsertBST(root, s);//插入 }}template
BSTNode
* BST
::Search(BSTNode
*r, T key){ if (r == nullptr) return nullptr; if (key == r->m_nValue) return r; else if (r->m_nValue > key) return Search(r->m_pLeft, key); else return Search(r->m_pRight, key);}template
bool BST
::DeleteBST(BSTNode
*&R, T key){ if (R == nullptr) return false; else if (R->m_nValue == key) { Delete(R); return true; } else if (key < R->m_nValue) return DeleteBST(R->m_pLeft, key);//查找key值 else return DeleteBST(R->m_pRight, key);}//删除情况分为三种情况//仔细理解template
void BST
::Delete(BSTNode
*&R){ BSTNode
*q, *s; if (R->m_pLeft==nullptr)//如果其左子树为空 { q = R; R = R->m_pRight;//R的右子数赋给R delete q;//删除q,即以前的R } if (R->m_pRight==nullptr) { q = R; R = R->m_pLeft; delete q; } else//左右子数都在 { q = R; s = R->m_pLeft; //寻找最大值进行与根结点的替换 while (s->m_pRight!=nullptr) { q = s; s = s->m_pRight; } R->m_nValue = s->m_nValue;//将此最大值赋给要删除的节点 if (q != R)//即进行了while循环,改变q q->m_pRight = s->m_pLeft;//s是q的右孩子,s是没有右子数的 else R->m_pLeft = s->m_pLeft; delete s; }}//获得根指针template
BSTNode
* BST
::GetpRoot(){ return root;}

转载地址:http://yidoi.baihongyu.com/

你可能感兴趣的文章
horizon开发环境搭建及keystone使用总结
查看>>
Google Guice使用入门(转)
查看>>
Google Guava官方教程(中文版)(转)
查看>>
【java开发系列】—— 自定义注解(转)
查看>>
创建虚拟机生成虚拟机全程日志打印输出流程详解(openstack开发必备)
查看>>
ESB简介及选型(转)
查看>>
JAVA编写HTTP代码并发布在网上
查看>>
JDBC连接数据库的原理和步骤
查看>>
开发微信公众平台的基本功能
查看>>
JSP内置对象的学习
查看>>
用java写文件输入输出流,实现复制粘贴的方法
查看>>
学习JSP的方法步骤(参考)
查看>>
JSP中常见TOMCAT错误代码原因
查看>>
MyEclipse中WEB项目加载mysql驱动方法
查看>>
常见编写JAVA报错总结
查看>>
org.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver的区别
查看>>
UTF-8和GBK有什么区别
查看>>
增加MyEclipse分配内存的方法
查看>>
头痛与早餐
查看>>
[转]在ASP.NET 2.0中操作数据::创建一个数据访问层
查看>>