【题目要求】
输入二叉树前序扩展字符串,构建二叉树,以前序,中序,后序,层序的方式分别输出该二叉树。
【代码】
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
struct BiNode
{
char data;//数据域
BiNode* lchild, * rchild;//左右儿子指针
};
class BiTree {
private:
BiNode* root; //指向根结点的头指针
public:
BiTree()
{
root = creat(root);//调函数构建二叉树
}
~BiTree() {
release(root);
}
BiNode* getRoot() { return root; }
BiNode* creat(BiNode* bt); //构造函数调用
void release(BiNode* bt); //析构函数调用,释放树的存储空间
void preOrder(BiNode* bt); //前序遍历函数调用
void inOrder(BiNode* bt); //中序遍历函数调用
void postOrder(BiNode* bt);//后序遍历函数调用
void leverOrder(BiNode* bt);//层序遍历函数调用
};
//前序构建二叉树
BiNode* BiTree::creat(BiNode* bt)
{
char ch;
cin >> ch;
if (ch == '#')
bt = NULL;
else
{
bt = new BiNode;
bt->data = ch;
bt->lchild = creat(bt->lchild);
bt->rchild = creat(bt->rchild);
}
return bt;
}
//前序遍历
void BiTree::preOrder(BiNode* bt)
{
if (bt == NULL)
return;
else
{
cout<<bt->data;
preOrder(bt->lchild);
preOrder(bt->rchild);
}
}
//中序遍历
void BiTree::inOrder(BiNode* bt)
{
if (bt == NULL)
return;
else
{
inOrder(bt->lchild);
cout << bt->data;
inOrder(bt->rchild);
}
}
//后序遍历
void BiTree::postOrder(BiNode* bt)
{
if (bt == NULL)
return;
else
{
postOrder(bt->lchild);
postOrder(bt->rchild);
cout << bt->data;
}
}
//层序遍历
void BiTree::leverOrder(BiNode* bt)
{
BiNode* q;
queue<BiNode*> Q;
Q.push(root);
if (root == NULL)
return;
while (!Q.empty())
{
q = Q.front();
cout << q->data;
Q.pop();
if (q->lchild != NULL)
Q.push(q->lchild);
if (q->rchild != NULL)
Q.push(q->rchild);
}
}
//析构函数
void BiTree::release(BiNode* bt)
{
if (bt != NULL)
{
release(bt->lchild);
release(bt->rchild);
// cout<<"delete "<<bt->data<<endl;
delete bt;
}
}
int main()
{
cout<<"输入前序字符串:";
BiTree tree;
cout << "前序遍历二叉树"<<endl;
tree.preOrder(tree.getRoot());
cout << endl;
cout << "中序遍历二叉树" << endl;
tree.inOrder(tree.getRoot());
cout << endl;
cout << "后序遍历二叉树" << endl;
tree.postOrder(tree.getRoot());
cout << endl;
cout << "层序遍历二叉树" << endl;
tree.leverOrder(tree.getRoot());
tree.release(tree.getRoot());
return 0;
}
【输出示例】