下面是测试二叉树的诸函数时写的一段代码(参照了国外的经典教材、清华大学出版社的《数据结构C++语言描述》):
TreeNode<char> *root1;
TreeNode<char> *a,*b,*c,*d,*e,*f,*g,*h,*i;
d = GetTreeNode('D',(TreeNode<char> *)NULL,(TreeNode<char> *)NULL);
e = GetTreeNode('E',(TreeNode<char> *)NULL,(TreeNode<char> *)NULL);
b = GetTreeNode('B',(TreeNode<char> *)NULL, d);
c = GetTreeNode('C',e, (TreeNode<char> *)NULL);
a = GetTreeNode('A',b, c);
root = a;
注意到NULL的使用方法了吗?(TreeNode<char> *)NULL!!没错,NULL也是要实例化的!
另外,本人用codeblocks 10.05编译的时候,发现编译器对书中的代码报错了。在书中,TreeNode的构造函数这样写:
TreeNode(const T& item,TreeNode* lptr,TreeNode* rptr):
data(item),left(lptr),right(rptr){ }
然后GetTreeNode的函数这样写:
template <class T>
TreeNode<T>* GetTreeNode(T item,TreeNode<T>* lptr,TreeNode<T>* rptr)
{
TreeNode<T>* p=new TreeNode<T>(item,lptr,rptr);
return p;
}
然后调用GetTreeNode函数时这样写:
d = GetTreeNode('D');
于是编译器报错,说找不到和GetTreeNode('D')匹配的函数类型。不知道在vc下面会不会报错。算是个小小的教训吧,咱们别偷懒,有几个参数就写几个参数吧。改成下面的形式就对了:
d = GetTreeNode('D',(TreeNode<char> *)NULL,(TreeNode<char> *)NULL);