标签:
输入
二叉树的先序遍历序列,用#代表空树或空子树。
输出
共五行
前三行依次输出先序、中序和后序遍历序列,
第四行输出二叉树的高度,
第五行依次输出二叉树总结点数目、叶子结点数目、度为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 }
标签:
原文地址:http://www.cnblogs.com/lzjtdxfxl/p/5380474.html