正文

一般树的 创建以及各种遍历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;
}

 

阅读(3596) | 评论(0)


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

评论

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