正文

一般树的 创建以及各种遍历2006-04-04 23:09:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/jixian/11946.html

分享到:

// 先按前序遍历创建一棵 三度 树,然后按 前序,后序,层次 遍历此树 #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;}  

阅读(3768) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册