#include "Tnode.hpp" // 因为下面使用了 Tnode的成员,所以必须包含。
#include "BSTree.hpp" // 必须包含类定义文件
using namespace std;
int regist_word(Tnode* & root, const std::string& newWord);
void print_pre_order(std::ostream& outFile, const Tnode* root, unsigned int deepth = 0);
void print_middle_order(std::ostream& outFile, const Tnode* root);
BSTree::BSTree() : myRoot(NULL)
{
}
BSTree::~BSTree()
{
if (NULL != myRoot)
delete myRoot;
}
bool BSTree::regist(const std::string& newWord)
{
if (newWord.length() == 0)
return false;
regist_word(myRoot, newWord);
return true;
}
bool BSTree::regist(const char* newWord)
{
if (NULL == newWord || '\0' == newWord[0])
return false;
regist_word(myRoot, newWord);
return true;
}
void BSTree::print(std::ostream& outFile)
{
if (myRoot == NULL)
{
outFile << "<NULL tree>\n";
return;
}
print_pre_order(outFile, myRoot, 0);
}
void BSTree::print_byorder(std::ostream& outFile)
{
if (myRoot == NULL)
{
outFile << "<NULL tree>\n";
return;
}
print_middle_order(outFile, myRoot);
}
int regist_word(Tnode* & root, const string& newWord)
{
if (NULL == root)
{
root = new Tnode(newWord);
return 0;
}
int r = newWord.compare(root->getWord());
if (r == 0)
{
// newWord 已经登记在树中,就是这个结点.
root->getCount() += 1;
}
else if (r < 0) // 小值放到 左孩子
{
regist_word(root->getLeft(), newWord);
}
else // 大值放到 右孩子
{
regist_word(root->getRight(), newWord);
}
return 0;
}
void print_pre_order(std::ostream& outFile, const Tnode* root, unsigned int deepth)
{
// 缩进,以便于观察结点深度
for (unsigned int d = 0; d<deepth; ++d) outFile << " ";
if (NULL == root)
{
outFile << "<NULL>\n"; //这个输出用于表现/区分左右孩子。
return;
}
root->print(outFile);
if ((NULL == root->getLeft()) && (NULL == root->getRight()))
return;
print_pre_order(outFile, root->getLeft(), deepth + 1);
print_pre_order(outFile, root->getRight(), deepth + 1);
}
// 按中序遍历方式,递归地输出树
void print_middle_order(std::ostream& outFile, const Tnode* root)
{
if (NULL == root)
return;
if (NULL != root->getLeft())
print_middle_order(outFile, root->getLeft());
root->print(outFile);
if (NULL != root->getRight())
print_middle_order(outFile, root->getRight());
}
Mr.羊
- 粉丝: 3106
- 资源: 74
最新资源
- 计算机二级MS office 选择题经典50题
- 基于Spring和Redis的全球化消息队列(MessageQueue)实现.zip
- 分布式事务之Seata.pdf
- SpringBoot 助力企业车辆管理系统可视化呈现:设计布局与代码数据展示
- 工具变量-700多所高校教育经费历史数据.xlsx
- 如果 redis 服务器配置不正确,并且在没有任何身份验证的情况下在互联网上访问,这将为你提供目标系统的 shell 访问权限.zip
- 对 redis 的一流异步和承诺支持 .zip
- 微信小程序期末大作业-日常消费登记表小程序(详情看我的文章介绍)
- 基于Phalcon的博客CMS
- 海洋生物检测25-YOLO(v5至v9)、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 对redis做了简化,方便理解源码,redis拥有非常漂亮的c风格的代码,值得一读 .zip
- 软考高级信息系统项目管理视频及文档.zip
- 1111drtfyguihopfcygvuhbij
- 网络安全期末复习资料最新整理-计算机安全导论-欧几里得求mod逆元-PPT-网络安全-考试要点-问题汇总等.zip
- 海洋鱼类检测39-COCO数据集.rar
- 特征点 python 深度学习
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈