二叉树遍历(C语言)题目3例

给定二叉树,设计程序构造和遍历二叉树:
 
前序遍历输入,后序遍历输出
 
例如二叉树:
 
 
输入序列 ABD..EH...CF.I..G..
输出结果为: DHEBIFGCA
 
基本思想:
采用递归建立和遍历二叉树
 
建立:先建立根节点,然后建立左、右子树
遍历:左、右、根
 
源程序:
 
InBlock.gif#include<malloc.h> 
InBlock.gif#include <stdio.h> 
InBlock.gif 
InBlock.gif struct node{ 
InBlock.gif   char info; 
InBlock.gif   struct node *llink, *rlink; 
InBlock.gif}; 
InBlock.gif 
InBlock.giftypedef  struct node NODE; 
InBlock.gif 
InBlock.gifNODE *create(){ 
InBlock.gif   char x; 
InBlock.gif  NODE *p; 
InBlock.gif    scanf( "%c", &x); 
InBlock.gif    printf( "%c", x); 
InBlock.gif     if(x!='.'){ 
InBlock.gif      p=(NODE *)malloc( sizeof(NODE)); 
InBlock.gif      p->info=x; 
InBlock.gif      p->llink=create(); 
InBlock.gif      p->rlink=create(); 
InBlock.gif    } 
InBlock.gif     else 
InBlock.gif      p=NULL; 
InBlock.gif     return p; 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif  void run(NODE *t){ 
InBlock.gif    
InBlock.gif   if(t){ 
InBlock.gif    run(t->llink); 
InBlock.gif    run(t->rlink); 
InBlock.gif 
InBlock.gif    printf( "%c", t->info); 
InBlock.gif  } 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gifmain() 
InBlock.gif
InBlock.gif  NODE *T; 
InBlock.gif 
InBlock.gif  printf( "Please input a tree:\n" ); 
InBlock.gif  T=create(); 
InBlock.gif  printf( "\n"); 
InBlock.gif   if(!T) 
InBlock.gif    printf( "This is a empty binary tree."); 
InBlock.gif   else 
InBlock.gif  {    
InBlock.gif    printf( "The result of post travese is: \n"); 
InBlock.gif    run(T); 
InBlock.gif    
InBlock.gif  } 
InBlock.gif  printf( "\n"); 
InBlock.gif}
编写递归算法,计算二叉树中叶子节点的数目:
 
源代码:
代码:
InBlock.gif#include<malloc.h> 
InBlock.gif#include <stdio.h> 
InBlock.gif 
InBlock.gif struct node{ 
InBlock.gif   char info; 
InBlock.gif   struct node *llink, *rlink; 
InBlock.gif}; 
InBlock.gif 
InBlock.giftypedef  struct node NODE; 
InBlock.gif 
InBlock.gifNODE *create(){ 
InBlock.gif   char x; 
InBlock.gif  NODE *p; 
InBlock.gif    scanf( "%c", &x); 
InBlock.gif    printf( "%c", x); 
InBlock.gif     if(x!='.'){ 
InBlock.gif      p=(NODE *)malloc( sizeof(NODE)); 
InBlock.gif      p->info=x; 
InBlock.gif      p->llink=create(); 
InBlock.gif      p->rlink=create(); 
InBlock.gif    } 
InBlock.gif     else 
InBlock.gif      p=NULL; 
InBlock.gif     return p; 
InBlock.gif
InBlock.gif 
InBlock.gif int run(NODE *t){ 
InBlock.gif   static  int count=0;    
InBlock.gif   if(t){ 
InBlock.gif    run(t->llink); 
InBlock.gif    run(t->rlink); 
InBlock.gif 
InBlock.gif    
InBlock.gif     if(t->llink ==NULL && t->rlink == NULL) { 
InBlock.gif      count++;    
InBlock.gif    } 
InBlock.gif  } 
InBlock.gif   return count; 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gifmain() 
InBlock.gif
InBlock.gif  NODE *T; 
InBlock.gif   int left_number; 
InBlock.gif  printf( "Please input a tree:\n" ); 
InBlock.gif  T=create(); 
InBlock.gif  printf( "\n"); 
InBlock.gif   if(!T) 
InBlock.gif    printf( "This is a empty binary tree."); 
InBlock.gif   else 
InBlock.gif  {    
InBlock.gif 
InBlock.gif    left_number=run(T); 
InBlock.gif    printf( "There are %d leaves in this binary tree. \n", left_number);    
InBlock.gif  } 
InBlock.gif  printf( "\n"); 
InBlock.gif}
编写递归算法,在二叉树中求位于先序序列中第K个位置的节点。
InBlock.gif#include<malloc.h> 
InBlock.gif#include <stdio.h> 
InBlock.gif 
InBlock.gif struct node{ 
InBlock.gif   char info; 
InBlock.gif   struct node *llink, *rlink; 
InBlock.gif}; 
InBlock.gif 
InBlock.giftypedef  struct node NODE; 
InBlock.gif 
InBlock.gifNODE *create(){ 
InBlock.gif   char x; 
InBlock.gif  NODE *p; 
InBlock.gif    scanf( "%c", &x); 
InBlock.gif   //  printf("%c", x); 
InBlock.gif     if(x!='.'){ 
InBlock.gif      p=(NODE *)malloc( sizeof(NODE)); 
InBlock.gif      p->info=x; 
InBlock.gif      p->llink=create(); 
InBlock.gif      p->rlink=create(); 
InBlock.gif    } 
InBlock.gif     else 
InBlock.gif      p=NULL; 
InBlock.gif     return p; 
InBlock.gif
InBlock.gif 
InBlock.gifrun(NODE *t,  int k){ 
InBlock.gif   static  int i=0; 
InBlock.gif   if(t&&i!=k) 
InBlock.gif  { 
InBlock.gif    i++; 
InBlock.gif     if(i==k) printf( "%c",t->info); 
InBlock.gif     else 
InBlock.gif      { 
InBlock.gif        run(t->llink,k); 
InBlock.gif        run(t->rlink,k); 
InBlock.gif      } 
InBlock.gif  } 
InBlock.gif
InBlock.gif 
InBlock.gif 
InBlock.gifmain() 
InBlock.gif
InBlock.gif  NODE *T; 
InBlock.gif   int k; 
InBlock.gif  printf( "Please input a tree:\n" ); 
InBlock.gif  T=create(); 
InBlock.gif  printf( "\n"); 
InBlock.gif  printf( "input k:\n"); 
InBlock.gif    scanf( "%d", &k); 
InBlock.gif   if(!T) 
InBlock.gif    printf( "This is a empty binary tree."); 
InBlock.gif   else 
InBlock.gif  {    
InBlock.gif 
InBlock.gif    run(T,k); 
InBlock.gif  } 
InBlock.gif  printf( "\n"); 
InBlock.gif}




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/113510,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值