码迷,mamicode.com
首页 > 其他好文 > 详细

NOJ1019-计算二叉树的高度和结点数

时间:2016-04-11 23:49:14      阅读:307      评论:0      收藏:0      [点我收藏+]

标签:

输入

 

二叉树的先序遍历序列,用#代表空树或空子树。

 

输出

 

共五行

前三行依次输出先序、中序和后序遍历序列,

第四行输出二叉树的高度,

第五行依次输出二叉树总结点数目、叶子结点数目、度为1的结点数目。

 

样例输入

A B # D # # C E # # F # #

样例输出

PreOrder: A B D C E F
InOrder: B D A E C F
PostOrder: D B E F C A
3
6 3 1

 

 

题目很简单,基本的二叉树操作。需要注意的是输入结点之间有空格,而且输出结点时也有空格,行末不能有空格。

 

  1 #include <cstdio>
  2 
  3 typedef char TElemType;
  4 
  5 typedef struct node {
  6     TElemType data;
  7     struct node *left_child;
  8     struct node *right_child;
  9 } BTNode, *BinTree;
 10 
 11 int node_count = 0;
 12 int leaf_count = 0;
 13 int one_count = 0;
 14 
 15 void Create( BTNode*& t) {
 16     char c;
 17     char ch;
 18     scanf( "%c", &c );
 19     ch = getchar();
 20     if( c ==# )
 21         t = NULL;
 22     else {
 23         t = new BTNode;
 24         t->data = c;
 25         Create( t->left_child );
 26         Create( t->right_child );
 27     }
 28 }
 29 
 30 void PreOrder( BTNode* t ) {
 31     if( t != NULL ) {
 32         printf( " %c", t->data );
 33         PreOrder( t->left_child );
 34         PreOrder( t->right_child );
 35     }
 36 }
 37 
 38 void InOrder( BTNode *t ) {
 39     if( t != NULL ) {
 40         InOrder( t->left_child );
 41         printf( " %c", t->data );
 42         InOrder( t->right_child );
 43     }
 44 }
 45 
 46 void PostOrder( BTNode *t ) {
 47     if( t != NULL ) {
 48         PostOrder( t->left_child );
 49         PostOrder( t->right_child );
 50         printf( " %c", t->data );
 51     }
 52 }
 53 
 54 int Height( BTNode *t ) {
 55     int i, j;
 56     if( t == NULL ) return 0;
 57     else {
 58          i = Height( t->left_child );
 59          j = Height( t->right_child );
 60     }
 61     return ( i > j ) ? ( i + 1 ) : ( j + 1 );
 62 }
 63 
 64 void BTNode_Count( BTNode *t ) {
 65     if( t == NULL ) return ;
 66     else {
 67          BTNode_Count( t->left_child );
 68          BTNode_Count( t->right_child );
 69          node_count++;
 70     }
 71 }
 72 
 73 void BTNode_LeafCount( BTNode *t ) {
 74     if( t == NULL ) return ;
 75     else {
 76         if( t->left_child == NULL && t->right_child == NULL ) {
 77             leaf_count++;
 78         }
 79         else if( t->left_child == NULL && t->right_child != NULL || t->left_child != NULL && t->right_child == NULL ){
 80             one_count++;
 81         }
 82         BTNode_LeafCount( t->left_child );
 83         BTNode_LeafCount( t->right_child );
 84     }
 85 }
 86 
 87 int main() {
 88     BTNode T;
 89     BinTree root = &T;
 90     Create( root );
 91     printf( "PreOrder:" );
 92     PreOrder( root );
 93     printf( "\n" );
 94     printf( "InOrder:" );
 95     InOrder( root );
 96     printf( "\n" );
 97     printf( "PostOrder:" );
 98     PostOrder( root );
 99     int height = Height( root );
100     BTNode_Count( root );
101     BTNode_LeafCount( root );
102     printf( "\n%d\n%d %d %d", height, node_count, leaf_count, one_count );
103     return 0;
104 }

 

NOJ1019-计算二叉树的高度和结点数

标签:

原文地址:http://www.cnblogs.com/lzjtdxfxl/p/5380474.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!