细节决定成败: BST c和c++实现的区别
来源:互联网 发布:做淘宝客服流程 编辑:程序博客网 时间:2024/05/19 04:28
#include "BST.h"
// 理解了概念不一定能实现,有忽视的地方
//由于BST的叶子节点自然构成了一颗区间树,因此插入操作不会像平衡树或者红黑树那样麻烦,插入只需要插在叶子节点。
//因此对于任何一个元素,总可以唯一确定其在叶子节点的位置,即把null(nullb本来代表查找失败)替换成新插入的节点。
//注意:不存在要插入的节点位于两个节点之间的情况,不需要判断这种情况,只需要判断新插入的元素挂在当前叶子节点的左字数或者右子树
//node和BST要分开,采用compositin的design pattern
void BST::insert(char* word)// 可以用bool(*st)(ValueType,ValueType)来比较任意的value
{
BSTNode* current=Root;
// BSTNode* pnn=new BSTNode(word);
while(current!=NULL)// 没到叶子节点,循环结束current指针必然为null,而新分配的节点内存的地址未知,存储在指针变量中pnn中,如何将pnn作为current的孩子呢?循环完了current就成null了,因此必须要得存储,current上面的父亲
// 因此,更好的表示方法是:while(current!=NULL)
{
if(current->st(word)) //小于则进入左子树
{
probe=current->getLChildNode(*current); //!!!!!!!!!!! 不能用current=current->getLChildNode(*current),必须使要插入点的父亲节点指向该插入点
//由于插入点是新分配的内存,无法知晓插入点的内存地址,因此要保存插入点的父亲节点。
}
else
{
probe=current->getLChildNode(*current);
}
current=probe;//提前向前推一步,这样probe就存储了叶子节点的父节点。
}
// c语言的在bst中新建节点的实现方法是 **BSTNode pp=&probe;
// current=malloc();
// *pp=current;// 即用指针的指针来强行使while循环过程中的null赋值为新建的malloc地址
}
bool BST::find(char* word)
{
BSTNode* current=Root;
bool flag;
while(current!=NULL)
{
if(current->matchChar(word)) return true;
else if(current->st(word))
{
flag=current->getLChildNode(*current);
}
else
{
flag=current->getLChildNode(*current);
}
}
if(current==NULL) return false;
}
// 理解了概念不一定能实现,有忽视的地方
//由于BST的叶子节点自然构成了一颗区间树,因此插入操作不会像平衡树或者红黑树那样麻烦,插入只需要插在叶子节点。
//因此对于任何一个元素,总可以唯一确定其在叶子节点的位置,即把null(nullb本来代表查找失败)替换成新插入的节点。
//注意:不存在要插入的节点位于两个节点之间的情况,不需要判断这种情况,只需要判断新插入的元素挂在当前叶子节点的左字数或者右子树
//node和BST要分开,采用compositin的design pattern
void BST::insert(char* word)// 可以用bool(*st)(ValueType,ValueType)来比较任意的value
{
BSTNode* current=Root;
// BSTNode* pnn=new BSTNode(word);
while(current!=NULL)// 没到叶子节点,循环结束current指针必然为null,而新分配的节点内存的地址未知,存储在指针变量中pnn中,如何将pnn作为current的孩子呢?循环完了current就成null了,因此必须要得存储,current上面的父亲
// 因此,更好的表示方法是:while(current!=NULL)
{
if(current->st(word)) //小于则进入左子树
{
probe=current->getLChildNode(*current); //!!!!!!!!!!! 不能用current=current->getLChildNode(*current),必须使要插入点的父亲节点指向该插入点
//由于插入点是新分配的内存,无法知晓插入点的内存地址,因此要保存插入点的父亲节点。
}
else
{
probe=current->getLChildNode(*current);
}
current=probe;//提前向前推一步,这样probe就存储了叶子节点的父节点。
}
// c语言的在bst中新建节点的实现方法是 **BSTNode pp=&probe;
// current=malloc();
// *pp=current;// 即用指针的指针来强行使while循环过程中的null赋值为新建的malloc地址
}
bool BST::find(char* word)
{
BSTNode* current=Root;
bool flag;
while(current!=NULL)
{
if(current->matchChar(word)) return true;
else if(current->st(word))
{
flag=current->getLChildNode(*current);
}
else
{
flag=current->getLChildNode(*current);
}
}
if(current==NULL) return false;
}
- 细节决定成败: BST c和c++实现的区别
- 【C/C++】细节决定成败
- 细节决定孩子成长的成败
- 细节决定成败!
- 细节决定成败
- 细节决定成败
- 细节决定成败
- 细节决定成败
- 细节决定成败
- 细节决定成败
- 细节决定成败。
- 细节决定成败
- 细节决定成败
- 细节决定成败
- 细节决定成败
- 细节决定成败
- 细节决定成败
- 细节决定成败
- SQL Server 优化存储过程的七种方法
- const,mutable,volitale的区别
- Java基本语法总结
- Linux 学习之路
- 监控元素加入的ObservableCollection
- 细节决定成败: BST c和c++实现的区别
- 错误提示:java.lang.NoSuchMethodException
- 信号量函数(semget、semop、semctl)及其范例
- 常用工具
- SpringMVC文件上传
- Linux Epoll介绍和程序实例
- Android事件处理过程分析
- 如何在未加入域的机器上使用集成认证来登陆SQL Server
- 数据源和连接池的区别