删除数值一般来说,须要依据以下几种情况分别进行处理:
1.须要删除的节点没有左儿子,那么把右儿子提上去
2.须要删除的节点的左儿子没有右儿子,那么就把左儿子提上去
3.以上两种情况都不满足的话,就把左儿子的子孙中最大的节点提到须要删除的节点上
和堆一样。非常多情况下不须要自己实现二叉搜索树,使用C++中的STL,STL里有set和map容器,
set是使用erc搜索树维护集合的容器,而map则是维护键和键相应的值得容器*/
#include <cstdio>
#include <set>
using namespace std;
int main()
{
set<int> s; //声明
s.insert(1); //插入元素
s.insert(3);
s.insert(5);
set<int>::iterator ite;; //查找元素
ite = s.find(1);
if (ite == s.end())
puts("not found");
else
puts("found");
ite = s.find(2);
if (ite == s.end())
puts("not found");
else
puts("found");
s.erase(3); //删除元素
if (s.count(3) != 0) //其它的查找元素的方法
puts("found");
else
puts("not found");
for (ite = s.begin(); ite != s.end(); ++ite){ //遍历全部元素
printf("%d\n", *ite);
}
return 0;
}
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;
int main()
{
map<int, const char*> m; //声明(int为键。 const char*为值)
m.insert(make_pair(1, "ONE")); //插入元素
m.insert(make_pair(10, "TEN"));
m[100] = "HUNDRED"; //其它的写法
map<int, const char*>::iterator ite; //查找元素
ite = m.find(1);
puts(ite->second); //(输出)ONE
ite = m.find(2);
if (ite == m.end())
puts("not found");
else
puts(ite->second);
puts(m[10]); //其它的写法
m.erase(10); //删除元素
for (ite = m.begin(); ite != m.end(); ++ite){ //遍历一遍全部元素
printf("%d: %s\n", ite->first, ite->second);
}
return 0;
}
二叉树搜索
最新推荐文章于 2023-12-23 01:40:42 发布