| 发表于:2008-01-22 06:43:50 楼主 |
大家帮我看看这个程序错什么地方了啊 (二叉查树) 还有为什么我吧treenode改成如下的形式就没错了啊 template <class nodetype> class treenode { friend class tree <nodetype> ; public: treenode(const nodetype &d):leftptr(null),data(d),rightptr(null){} nodetype getdata() const { return data; } private: treenode <nodetype> *leftptr; nodetype data; treenode <nodetype> *rightptr; }; 这不是一个意思吗 难到定义和实现不可以分开吗 #include <iostream> using namespace std; #include <iomanip> //definition of class treenode template <class nodetype> class tree; template <class nodetype> class treenode { friend class tree <nodetype> ; public: treenode(const nodetype &d); nodetype getdata() const; private: treenode <nodetype> *leftptr; nodetype data; treenode <nodetype> *rightptr; }; //member function definition for class treenode template <class nodetype> treenode::treenode(const nodetype &d):leftptr(null),data(d),rightptr(null) {} template <class nodetype> nodetype treenode::getdata(void) const { return data; } //definition of class tree template <class nodetype> class tree { public: tree(); void insertnode(const nodetype&); void preordertraversal() const; void inordertraversal() const; void postordertraversal() const; private: treenode <nodetype> *rootptr; //utility function void insertnodehelper(treenode <nodetype> **,const nodetype&); void preorderhelper(treenode <nodetype> *) const; void inorderhelper(treenode <nodetype> *) const; void postorderhelper(treenode <nodetype> *) const; }; //member function definition for class tree template <class nodetype> tree <nodetype> ::tree() { rootptr=0; } template <class nodetype> void tree <nodetype> ::insertnode(const nodetype &value) { insertnodehelper(&rootptr,value); } //this function receives a pointer to a point so the //pointer can be modified template <class nodetype> void tree <nodetype> ::insertnodehelper(treenode <nodetype> **ptr,const nodetype &value) { if(*ptr==0) { *ptr=new treenode <nodetype> (value); // assert(*ptr!=0); } else if(value <(*ptr)-> data) insertnodehelper(&((*ptr)-> leftptr),value); else if(value> (*ptr)-> data) insertnodehelper(&((*ptr)-> rightptr),value); else cout < <value < <" dup" < <endl; } template <class nodetype> void tree <nodetype> ::preordertraversal()const { preorderhelper(rootptr); } template <class nodetype> void tree <nodetype> ::preorderhelper(treenode <nodetype> *ptr) const { if(ptr!=0) { cout < <ptr-> data < <" "; preorderhelper(ptr-> leftptr); preorderhelper(ptr-> rightptr); } } template <class nodetype> void tree <nodetype> ::inordertraversal()const { inorderhelper(rootptr); } template <class nodetype> void tree <nodetype> ::inorderhelper(treenode <nodetype> *ptr) const { if(ptr!=0) { inorderhelper(ptr-> leftptr); cout < <ptr-> data < <" "; inorderhelper(ptr-> rightptr); } } template <class nodetype> void tree <nodetype> ::postordertraversal()const { postorderhelper(rootptr); } template <class nodetype> void tree <nodetype> ::postorderhelper(treenode <nodetype> *ptr) const { if(ptr!=0) { postorderhelper(ptr-> leftptr); postorderhelper(ptr-> rightptr); cout < <ptr-> data < <" "; } } int main() { tree <int> inttree; int intval,i; cout < <"enter 10 integer values:\n"; for(i=0;i <10;i++) { cin> > intval; inttree.insertnode(intval); } cout < <"\npreorder traversal\n"; inttree.preordertraversal(); cout < <"\ninorder traversal\n"; inttree.inordertraversal(); cout < <"\npostorder traversal\n"; inttree.postordertraversal(); system("pause"); return 0; } |
|
|
|
|