删除数值一般来说,须要依据以下几种情况分别进行处理: 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 ", *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 ", ite->first, ite->second); } return 0; }