| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1743 人关注过本帖
标题:二叉树的先序遍历与后序遍历
取消只看楼主 加入收藏
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
收藏
 问题点数:0 回复次数:3 
二叉树的先序遍历与后序遍历
1.建立如下图所示的二叉树
                           A
                  B                    C
              D                     E      F
                  G
  
2.编写程序对上述二叉树进行先序遍历和后序遍历。
3. 编写函数按先序遍历方式统计二叉树中的叶子结点数并显示在屏幕上。
搜索更多相关主题的帖子: 遍历 二叉树 
2008-11-17 16:45
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
收藏
得分:0 
#include"stdlib.h"
 #include"stdio.h"

  typedef char DataType;

  typedef struct Node
  {DataType data;
  struct Node *leftchild;
  struct Node *rightchild;
   }BiTreeNode;

  void Visit(DataType item)
  {printf("%c",item);
  }


 void  Destroy(BiTreeNode **root)
 { if((*root)!=NULL&&((*root)->leftchild!=NULL))
     Destroy(&(*root)->leftchild);
     if((*root)!=NULL&&((*root)->rightchild!=NULL))
     Destroy(&(*root)->rightchild);
     free(*root);
     }


  void Initiate(BiTreeNode **root)
  {*root=(BiTreeNode  *)malloc(sizeof(BiTreeNode));
  (*root)->leftchild=NULL;
  (*root)->rightchild=NULL;
  }

 BiTreeNode *InsertLeftNode(BiTreeNode *curr,DataType x)
  {BiTreeNode *s,*t;
  if(curr==NULL)  return NULL;
   t=curr->leftchild;
   s=(BiTreeNode *)malloc(sizeof(BiTreeNode));
   s->data=x;
     s->leftchild=t;
   s->rightchild=NULL;

   curr->leftchild=s;
   return curr->leftchild;
   }

 BiTreeNode *InsertRightNode(BiTreeNode *curr,DataType x)
  {  BiTreeNode *s,*t;
    if(curr==NULL)  return NULL;
     t=curr->rightchild;
   s=(BiTreeNode *)malloc(sizeof(BiTreeNode));
   s->data=x;
   s->rightchild=t;
      s->leftchild=NULL;
   curr->rightchild=s;
   return curr->rightchild;
   }


   BiTreeNode *DeleteLeftTree(BiTreeNode *curr)
   {if(curr==NULL||curr->leftchild==NULL)
     return NULL;
     Destroy(&curr->leftchild);
     curr->leftchild=NULL;
     return curr;
     }


     BiTreeNode *DeleteRightTree(BiTreeNode *curr)
   {if(curr==NULL||curr->rightchild==NULL)
     return NULL;
     Destroy(&curr->rightchild);
     curr->rightchild=NULL;
     return curr->rightchild;
     }
   


     void PrintBiTree(BiTreeNode *bt,int n)
     {int i;
     if(bt==NULL)return;
     PrintBiTree(bt->rightchild,n+1);
     for(i=0;i<n;i++)printf("  ");
     if(n>=0)
     {printf("------");
     printf("%c\n",bt->data);
     }
    
     PrintBiTree(bt->leftchild,n+1);
    
     }


     void PreOrder(BiTreeNode *t,void Visit(DataType item))
     {if(t!=NULL)
     {Visit(t->data);
     PreOrder(t->leftchild,Visit);
     PreOrder(t->rightchild,Visit);
     }
     }

     void PostOrder(BiTreeNode *t,void Visit(DataType item))
     {if(t!=NULL)
     { PostOrder(t->leftchild,Visit);
     PostOrder(t->rightchild,Visit);
     Visit(t->data);
     }
     }

    int leafsum(BiTreeNode *s)/*统计叶子结点数并打印叶子节点*/
    { int n;
        if(s==NULL) return 0;
    if(s->leftchild==NULL&&s->rightchild==NULL)

    {Visit(s->data);
        leafsum(s->leftchild);
    leafsum(s->rightchild);
    printf("\n");
    return 1;}

    n=(leafsum(s->leftchild)+leafsum(s->rightchild));
    return n;
    
    }

     void  main(void)
     {int t;
         BiTreeNode *root,*p,*pp;
     Initiate(&root);
     p=InsertLeftNode(root,'A');
      p=InsertLeftNode(p,'B');
      p=InsertLeftNode(p,'D');
      p=InsertRightNode(p,'G');
       p=InsertRightNode(root->leftchild,'C');
     pp=p;
     InsertLeftNode(p,'E');
     InsertRightNode(pp,'F');
   

     PrintBiTree(root,0);
       printf("前序遍历:");
     PreOrder(root->leftchild,Visit);
     printf("\n后序遍历:");
      PostOrder(root->leftchild,Visit);
      printf("\n");
     t=leafsum(root->leftchild);/*这个是求得叶子结点*/
     printf("%d",t);
    
     Destroy(&root);

     }
    欢迎参考哦!!这是我自己做的,是可以实现的!大家学习一下吧
2008-11-20 23:39
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
收藏
得分:0 
刚刚开始的那些都是一些函数来的,关于二叉树要用到的操作函数,以及撤消,还有遍历的函数~不动可以提出来哦!!
2008-11-20 23:40
强者
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-10-9
收藏
得分:0 
那你用递归写写看 啊,我想知道啊~~
2008-11-26 21:28
快速回复:二叉树的先序遍历与后序遍历
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016541 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved