0
你好以下模板代碼是從'Computational Geometry and Computer graphics in C++ by Michael J Laszlo '插入功能
代碼上面的代碼
#include "treenode.h"
#include<iostream>
int compare(int x , int y)
{
if (x > y) {return 1;}
else if (x ==y) { return 0 ;}
else {return -1;};
};
void printer(int x) {std::cout <<x<<"\n";};
int main(){
SearchTree <int> jo(compare);jo.insert(9);
jo.insert(2);jo.insert(10);jo.insert(3);
jo.inorder(printer);
std::cout<<jo.find(10)<<std::endl;
return 0;
}
輸出的
#include <cstdlib>
template <class T> class SearchTree;
template<class T> class TreeNode{
private:
TreeNode * _lchild;
TreeNode * _rchild;
T val;
public:
TreeNode(T);
virtual ~TreeNode(void);
friend class SearchTree<T>;
};
template <class T> TreeNode<T> :: TreeNode(T v) : val(v) , _lchild(NULL) , _rchild(NULL)
{}
template <class T> TreeNode <T> :: ~TreeNode(void)
{
if (_lchild) delete _lchild;
if (_rchild) delete _rchild;
}
//////////////////////////////////////////////////////////////////////////////////////
///////-------------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////////////
//////+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/////////////////////////////////////////////////////////////////////////////////////
template <class T> class SearchTree {
private:
TreeNode <T> * root;
int (*cmp) (T,T);
void _inorder(TreeNode <T>*,void(*)(T));
public:
SearchTree (int (*) (T,T));
~SearchTree(void);
int isEmpty(void);
T find(T);
T findMin(void);
void inorder(void (*) (T));
void insert(T);void remove(T);T removeMin(void);
};
template <class T>
SearchTree<T>::SearchTree(int(*c) (T,T)): cmp(c) ,root(NULL)
{}
template <class T>
SearchTree<T>::~SearchTree()
{ if (root) delete root ;}
template <class T> void SearchTree <T>::_inorder(TreeNode <T> *n ,void (*visit) (T))
{
if (n) {
_inorder(n->_lchild ,visit);
(*visit)(n->val);
_inorder(n->_rchild,visit);
};
}
template <class T> void SearchTree<T> :: inorder(void (*visit)(T)) {_inorder(root,visit);}
template <class T>
void SearchTree<T>::insert(T val)
{
if (root ==NULL) {
root =new TreeNode <T> (val);
return;
}
else{
int result;
TreeNode <T> * n, *p =root;
while (n) {
p=n;
result=(*cmp)(val,p->val);
if (result <0)
{n = p->_lchild;}
else if (result >0)
{ n= p->_rchild;}
else
{return ;};
}
if (result <0) p->_lchild =new TreeNode <T> (val);
else p -> _rchild =new TreeNode <T> (val);
}
}
template <class T>
T SearchTree <T> :: find (T val) {
int result;
TreeNode <T> * n =root;
while (n) {
result=(*cmp)(val,n->val);
if (result >0) n =n->_rchild;
else if (result <0) n=n->_lchild;
else return n->val;
};
return 0;
}
用法
問題
在哪裏作者回事?還是我執行錯了?
我個人認爲,在插入功能失常,因爲搜索的一些成員先前插入返回否..
是的,只是檢查出來。你所說的正是問題和解決方案。 –