SDUT - 2136 데이터 구조 실험의 이 진 트 리 구축 과 옮 겨 다 니 기

8112 단어 데이터 구조
제목 설명
       abc, de, g, f,, (그 중 쉼표 는 빈 노드 를 표시 합 니 다).이 진 트 리 를 만 들 고 중간 순서 와 뒷 순서 로 이 진 트 리 를 옮 겨 다 니 며 마지막 으로 잎 노드 의 개수 와 이 진 트 리 의 깊이 를 구 하 십시오.
 
입력
 50 글자 이하 의 문자열 을 입력 하 십시오.
출력
출력 은 모두 4 줄 입 니 다:
첫 번 째 줄 출력 에서 시퀀스 옮 겨 다 니 기;
두 번 째 줄 출력 후 시퀀스 옮 기기;
세 번 째 줄 출력 잎 노드 개수;
네 번 째 줄 출력 이 진 트 리 깊이.
 
엄 선생님 책 에 써 있 는 거 에 대해 서 정말 힘 들 게 봤 어 요.
 1 #include<stdio.h>
2 #include<malloc.h>
3 typedef struct btnode
4 {
5 char data;
6 struct btnode *L,*R;
7 }st;
8 st *t;
9 int count = 0 ;
10 st *creat(st *t)//
11 {
12 char c;
13 if((c = getchar())==',')//
14 t = NULL;
15 else
16 {
17 t = (st *)malloc(sizeof(st));
18 t->data = c;//
19 t->L = creat(t->L);
20 t->R = creat(t->R);
21 }
22 return t;
23 }
24 void inorder(st *t)//
25 {
26 if(t!=NULL)
27 {
28 inorder(t->L);
29 printf("%c",t->data);
30 inorder(t->R);
31 }
32 }
33 void posorder(st *t)//
34 {
35 if(t!=NULL)
36 {
37 posorder(t->L);
38 posorder(t->R);
39 printf("%c",t->data);
40 }
41 }
42 void leafnum(st *t)//
43 {
44 if(t)
45 {
46 if((t->L == NULL)&&(t->R == NULL))
47 count++;
48 leafnum(t->L);
49 leafnum(t->R);
50 }
51 }
52 int deep(st *t)
53 {
54 int ld,rd;
55 if(!t)
56 return 0;
57 else
58 {
59 ld = deep(t->L);
60 rd = deep(t->R);
61 if(ld>=rd)
62 return ld+1;
63 else
64 return rd+1;
65 }
66 return 1;
67 }
68 int main()
69 {
70 struct btnode *s;
71 int height ;
72 s = creat(t);
73 inorder(s);
74 puts("");
75 posorder(s);
76 puts("");
77 leafnum(s);
78 printf("%d
",count);
79 height = deep(s);
80 printf("%d
",height);
81 return 0;
82 }

다 재 귀 구 하 는 거 야. 쓰 는 것 도 헷 갈 려.

좋은 웹페이지 즐겨찾기