数据结构实验之二叉树的建立与遍历

题目描述

       已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。

输入

 输入一个长度小于50个字符的字符串。

输出

输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。

示例输入

abc,,de,g,,f,,,

示例输出

cbegdfa

cgefdba

3

5
 1 #include<stdio.h>

 2 #include<stdlib.h>

 3 typedef struct node

 4 {

 5     char data;

 6     struct node *l;

 7     struct node *r;

 8 }tree;

 9 int count = 0;

10 

11 tree *creat(tree *p)                              //树的建立

12 {

13     char c;c = getchar();

14     if((c == ','))

15     p=NULL;

16     else

17     {

18         p=(tree*)malloc(sizeof(tree));

19         p->data=c;

20         p->l=creat(p->l);

21         p->r=creat(p->r);

22     }

23     return p;

24 }

25 

26 void pre(tree *p)                                       //前序遍历

27 {

28     if(p != NULL)

29     {

30         printf("%c",p->data);

31         pre(p->l);

32         pre(p->r);

33     }

34 }

35 

36 void in(tree *p)                                        //中序遍历

37 {

38     if(p!=NULL)

39     {

40         in(p->l);

41         printf("%c",p->data);

42         in(p->r);

43     }

44 }

45 

46 void last(tree *p)                                     //后序遍历

47 {

48     if(p!=NULL)

49     {

50         last(p->l);

51         last(p->r);

52         printf("%c",p->data);

53     }

54 }

55 void leaves(tree *p)

56 {

57     if(p!=NULL)

58     {

59         if(p->l==NULL&&p->r==NULL)

60         {

61             count++;

62         }

63         leaves(p->l);

64         leaves(p->r);

65     }

66 }

67 

68 int treedeep(tree *p)

69 {

70     int ld,rd;

71     if(!p)

72     return 0;

73     else

74     {

75         ld=treedeep(p->l);

76         rd=treedeep(p->r);

77         if(ld>rd)

78         return ld+1;

79         else

80         return rd+1;

81     }

82 }

83 int main()

84 {

85     tree *p;

86     p = creat(p);

87     pre(p);

88     printf("\n");

89     in(p);

90     printf("\n");

91     last(p);

92     printf("\n");

93     leaves(p);

94     printf("%d\n",count);

95     printf("%d\n",treedeep(p));

96     return 0;

97 

98 }

 

你可能感兴趣的:(数据结构)