二叉搜索树C++实现

原创 2016年05月31日 10:54:08


1、二叉搜索树

Bin_Search_tree.h

1 
  2 #include <iostream>
  3 using namespace std;
  4 
  5 template<class T>
  6 struct BSTNode
  7 {
  8     T data;
  9     BSTNode<T> *leftchild,*rightchild;
 10     BSTNode(const T d=T())
 11         :data(d),leftchild(NULL),rightchild(NULL)
 12     {}  
 13 };
 14 
 15 template<class T>
 16 class BSTree
 17 {
 18     private:
 19         T _value;
 20         BSTNode<T> *root;
 21     public:
 22         BSTree(const T value=T()):_value(value),root(NULL)
 23         {}
 24     private:
 25         BSTNode<T>* search(const T key,BSTNode<T> *cur)
 26         {
 27             if(cur==NULL)
 28                 return NULL;
 29             if(key==cur->data)
 30                 return cur;
 31             else if(key <cur->data)
 32                 search(key,cur->leftchild);
 33             else if(key > cur->data)
 34                 search(key,cur->rightchild);
 35         }
 36     private:
 37 
 38         void insert(const T key,BSTNode<T> *&cur)
 39         {
 40             //BSTNode<T> *tmp=search(key,cur);
 41             if(cur==NULL)
 42             {
 43                 cur=new BSTNode<T>(key);
 44                 //cur=tmp;
 45             }else if(key <cur->data)
 46                 insert(key,cur->leftchild);
 47             else if(key > cur->data)
 48                 insert(key,cur->rightchild);
 49             else
 50                 return;
 51         }
 52         void InOrder(BSTNode<T> *cur)
 53         {
 54             if(cur !=NULL)
 55             {
 56                 InOrder(cur->leftchild);
 57                 cout<<cur->data<<" ";
 58                 InOrder(cur->rightchild);
 59             }
 60         }
 61         void Remove(BSTNode<T> *&cur,const T key)
 62         {
 63             BSTNode<T> *tmp=NULL;
 64             if(cur !=NULL)
 65             {
 66                 if(cur->data > key)
 67                     Remove(cur->leftchild,key);
 68                 else if(cur->data < key)
 69                     Remove(cur->rightchild,key);
 70                 else if(cur->leftchild !=NULL && cur->rightchild !=NULL)
 71                 {
 72                     tmp=cur->rightchild;
 73                     while(tmp->leftchild !=NULL)
 74                         tmp=tmp->leftchild;
 75                     cur->data=tmp->data;
 76                     Remove(cur->rightchild,cur->data);
 77                     //Remove(cur->data,cur->rightchild);
 78                 }else
 79                 {
 80                     tmp=cur;
 81                     if(cur->leftchild==NULL)
 82                         cur=cur->rightchild;
 83                     else 
 84                         cur=cur->leftchild;
 85                     delete tmp;
 86                     tmp=NULL;
 87                 }
 88             }
 89         }
 90     public:
 91 
 92         void remove(const T key)
 93         {
 94             Remove(root,key);
 95         }
 96         void get(const T key)
 97         {
 98             BSTNode<T> *cur=search(key,root);
 99             if(cur !=NULL)
100                 cout<<cur->data<<endl;
101             else
102                 cout<<"not found"<<endl;
103         }
104         void create(const T value)
105         {
106             insert(value,root);
107         }
108         void insert(const T key)
109         {
110             insert(key,root);
111         }
112     public:
113         void InOrder()
114         {
115             InOrder(root);
116         }
117 };  




2、main.cpp

                                                                                                                     
  2 #include "Bin_Search_tree.h"
  3 
  4 int main()
  5 {
  6     BSTree<int> t;
  7     cout<<"please enter value:";
  8     int value=0;
  9     while(cin>>value && value !=-1)
 10         t.create(value);
 11     t.InOrder();
 12     cout<<"\nplease enter value:";
 13     cin>>value;
 14     t.get(value);
 15     cout<<"\nplease enter value:";
 16     cin>>value;
 17     t.remove(value);
 18     t.InOrder();
 19 
 20     cout<<"\n********end**********"<<endl;
 21     return 0;
 22 }


版权声明:本文为博主原创文章,未经博主允许不得转载。

VC/C++实现二叉搜索树查找算法

  • 2010年12月21日 16:33
  • 468KB
  • 下载

二叉搜索树 -【动态规划】最优C++实现

程序在VC++6.0下编译通过 1 #include iostream> 2 #include fstream> 3 #include string> 4 #include li...

二叉搜索树的c++实现

  • 2014年07月05日 16:38
  • 9KB
  • 下载

C++一步一步实现二叉搜索树

学习《STL源码剖析》关联容器的章节,map,set等关联容器的底层实现都是红黑树,本着循序渐进的思想,先实现二叉搜索树。读懂了二叉搜索树的定义后,实现了二叉搜索树的基本功能。文章属原创,代码全手打,...

二叉搜索树(C#,C++)

  • 2017年10月11日 10:45
  • 3.58MB
  • 下载

二叉搜索树的C++源代码

  • 2009年08月28日 22:40
  • 5KB
  • 下载

二叉搜索树的c++实现

一、二叉搜索书的基本概念、难点 前驱:大于该结点关键字的最小关键字的结点 后继:小于该结点关键字的最大关键字的结点   删除操作 分为三种情况,都调用了结点替换函数;较复杂的情况为要删除的结点有两个孩...

二叉搜索树C++代码

  • 2016年07月30日 19:33
  • 2.22MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉搜索树C++实现
举报原因:
原因补充:

(最多只允许输入30个字)