最近应为要找工作准备把数据结构的基础的东西在不借助外力的情况下,自己都编写一遍,以为自己都知道的,结果一遍种小错误,简直要人命啊………………
本例最大的收获,*本质上是传值的,所以得用*&(指针的应用),不信你递归建立二叉树的时候用指针(不用指针引用)试试……
BiTree.cpp如下:
#include <iostream>
using namespace std;
template<typename T>
struct BiTreeNode
{
T data;
BiTreeNode *Lchild, *Rchild;
BiTreeNode() :Lchild(NULL), Rchild(NULL){}
BiTreeNode(const T& d, BiTreeNode *lchild = NULL, BiTreeNode *rchild = NULL) :data(d), Lchild(lchild), Rchild(rchild){}
};
template<typename T>
class BiTree
{
public:
BiTree(){ /*root = NULL;*/ }
~BiTree(){ /*makeEmpty();*/ }
void makeEmpty(BiTreeNode<T>* &root);
void createBiTree(BiTreeNode<T>* &root);
void output(BiTreeNode<T> *root);
void preOrder(BiTreeNode<T>* &root);
void inOrder(BiTreeNode<T>* &root);
void postOrder(BiTreeNode<T>* &root);
//BiTreeNode<T> * root;
};
template<typename T>
void BiTree<T>::createBiTree(BiTreeNode<T>* &root)
{
char ch;
cin >> ch;
if (ch == '#')
{
root = NULL;
}
else
{
root = new BiTreeNode<T>(ch);
createBiTree(root->Lchild);
createBiTree(root->Rchild);
}
}
template<typename T>
void BiTree<T>::output(BiTreeNode<T> *root)
{
if (root)
{
cout << root->data << " ";
output(root->Lchild);
output(root->Rchild);
}
}
template<typename T>
void BiTree<T>::makeEmpty(BiTreeNode<T>* &root)
{
}
template<typename T>
void BiTree<T>::preOrder(BiTreeNode<T>* &root)
{
if (root)
{
cout << root->data << " ";
preOrder(root->Lchild);
preOrder(root->Rchild);
}
}
template<typename T>
void BiTree<T>::inOrder(BiTreeNode<T>* &root)
{
if (root)
{
preOrder(root->Lchild);
cout << root->data << " ";
preOrder(root->Rchild);
}
}
template<typename T>
void BiTree<T>::postOrder(BiTreeNode<T>* &root)
{
if (root)
{
postOrder(root->Lchild);
postOrder(root->Rchild);
cout << root->data << " ";
}
}
void main()
{
BiTreeNode<char> * R=NULL;
BiTree<char> * bt = new BiTree<char>();
bt->createBiTree(R);
cout << "输出结果是:" << endl;
bt->output(R);
cout << endl;
cout << "先根遍历:" << endl;
bt->preOrder(R);
cout << endl;
cout << "中根遍历:" << endl;
bt->inOrder(R);
cout << endl;
cout << "后根遍历:" << endl;
bt->postOrder(R);
cout << endl;
while (1)
{
}
}
结果如下: