typedef int ElemType;
struct NodeType
{
ElemType data;
NodeType *lch;
NodeType *rch;
};
class BiTree
{
public:
BiTree() { root = NULL; }
~BiTree()
{
destory(root);
root = NULL;
}
void creat();
void preorder()
{
preorder(root);
}
void inorder()
{
inorder(root);
}
void postorder()
{
postorder(root);
}
protected:
NodeType *root;
private:
void preorder(NodeType *p);
void inorder(NodeType *p);
void postorder(NodeType *p);
void destory(NodeType *p);
};
void BiTree::destory(NodeType *p)
{
if (p != NULL)
{
destory(p->lch);
destory(p->rch);
delete p;
}
}
void BiTree::creat()
{
NodeType *q, *s[20];
ElemType x;
int i, j;
cout << "\n 请按照二叉树的层序,自上而下自左至右顺序组织数据" << endl;
cout << "\n 每次输入结点的序号和数据,假设根结点值为11" << endl;
cout << "\n 那么输入应是:1 11" << endl;
root = NULL;
cout << "\n i = " << endl;; cin >> i;
cout << "\n x = " << endl; cin >> x;
while ((i != 0) && x != 0)
{
q = new NodeType;
q->data = x;
q->lch = NULL;
q->rch = NULL;
s[i] = q;
if (i == 1)root = q;
else
{
j = i / 2;
if (i % 2 == 0)
s[j]->lch = q;
else
s[j]->rch = q;
}
cout << "\n i = " << endl;; cin >> i;
cout << "\n x = " << endl; cin >> x;
}
}
void BiTree::preorder(NodeType *p)
{
if (p != NULL)
{
cout << p->data << "" << endl;
preorder(p->lch);
preorder(p->rch);
}
}
void BiTree::inorder(NodeType *p)
{
if (p != NULL)
{
inorder(p->lch);
cout << p->data << "" << endl;
inorder(p->rch);
}
}
void BiTree::postorder(NodeType *p)
{
if (p != NULL)
{
postorder(p->lch);
postorder(p->rch);
cout << p->data << "" << endl;
}
}
int main()
{
BiTree tree0;
tree0.creat();
cout << "\n 遍历结果为:";
tree0.postorder();
std::cout << "Hello World!\n";
}