// 先按前序遍历创建一棵 三度 树,然后按 前序,后序,层次 遍历此树
#include <iostream>
using namespace std;
#define m 3
typedef char datatype;
typedef struct node
{
datatype data;
struct node* child[m];
}node,*tree;
tree root;
// 按前序遍历 创建一棵度数为3的树的递归算法
void createtree(tree *p) //*p 可以换成p 吗?
{
int i;
char ch;
if((ch=getchar())==' ') *p=NULL; //建立一棵空树
else
{
*p=(tree)malloc(sizeof(node)); //用new 怎么建立
(*p)->data=ch;
for(i=0;i<m;i++)
createtree(&(*p)->child[i]);
}
}
//树的前序遍历递归算法
void preorder(tree p) //P为指向树根的指针
{
int i;
if(p!=NULL) //树不为空
{
cout<<p->data; //输出根节点的值
for(i=0;i<m;i++) //依次递归实现各子树的前序遍历
preorder(p->child[i]);
}
}
//树的后序遍历的递归算法
void postorder(tree p)
{
int i;
if(p!=NULL)
{
for(i=0;i<m;i++) //依次递归实现个子树的后序遍历
postorder(p->child[i]);
cout<<p->data; //输出根节点的值
}
}
//树的层次遍历
void level(tree t)
{
tree queue[20]; //存放等待访问的节点队列,每个元素都是指针型
int f=0,r=0,i; //f,r 分别是队头,队尾指针
tree p;
queue[0]=t;
while(f<=r)
{
p=queue[f];
f++;
cout<<p->data; //访问队头元素
for(i=0;i<m;i++) //将刚被访问的元素的所有子女 节点依次进队
if(p->child[i])
{
++r;
queue[r]=p->child[i];
}
}
}
int main()
{
tree T;
cout<<"输入要创建的树:";
createtree(&T);//创建 一棵树
cout<<"按前序遍历此树:";
preorder(T);
cout<<"\n按后序遍历此树:";
postorder(T);
cout<<"\n按层次遍历此树:";
level(T);
cout<<endl;
}
评论