fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5.  
  6. struct arvore {
  7. int key;
  8. struct arvore * right, *left;
  9.  
  10.  
  11. };
  12.  
  13. typedef struct arvore Arvore;
  14.  
  15. Arvore * alocar(int key) {
  16. Arvore * p = (Arvore *)malloc(sizeof(Arvore));
  17. p->key = key;
  18. p->right = NULL;
  19. p->left = NULL;
  20. return p;
  21.  
  22. }
  23.  
  24. int procurafolha(Arvore * p) {
  25. int a = 0;
  26. if(p->right == NULL && p->left == NULL) {
  27. return p->key;
  28. } else {
  29. if(p->left != NULL) {
  30. a = a + procurafolha(p->left);
  31. }
  32. if(p->right != NULL) {
  33. a = a + procurafolha(p->right);
  34. }
  35. }
  36.  
  37. return a;
  38.  
  39. }
  40.  
  41. int procurasemfolha(Arvore * p) {
  42. int a = 0;
  43.  
  44. if(p->left != NULL) {
  45. a = a + procurasemfolha(p->left);
  46. }
  47. if(p->right != NULL) {
  48. a = a + procurasemfolha(p->right);
  49. }
  50. if(p->right != NULL || p->left != NULL) {
  51. a = a + p->key;
  52.  
  53. }
  54.  
  55. return a;
  56.  
  57. }
  58.  
  59.  
  60.  
  61.  
  62. Arvore * insere(Arvore * p, int key) {
  63.  
  64. if(p == NULL) {
  65. p = alocar(key);
  66. return p;
  67.  
  68. } else if(key < p->key) {
  69. p->left = insere(p->left, key);
  70. } else if(key > p->key) {
  71. p->right = insere(p->right, key);
  72. }
  73.  
  74. return p;
  75. }
  76.  
  77. void libera(Arvore * p) {
  78. if(p != NULL) {
  79. libera(p->left);
  80. libera(p->right);
  81. free(p);
  82. p = NULL;
  83. }
  84.  
  85.  
  86. }
  87.  
  88. void mostrar(Arvore *p){
  89.  
  90. if (p == NULL) return;
  91.  
  92. mostrar(p->left);
  93. printf("%d ", p->key);
  94. mostrar(p->right);
  95. }
  96.  
  97. int soma_folhas(Arvore *p){
  98. if (p == NULL) return 0;
  99.  
  100. int valorNo = (p->left == NULL && p->right == NULL) ? p->key : 0;
  101. return valorNo + soma_folhas(p->left) + soma_folhas(p->right);
  102. }
  103.  
  104. int soma_nao_folhas(Arvore *p){
  105. if (p == NULL) return 0;
  106.  
  107. int valorNo = (p->left == NULL && p->right == NULL) ? 0 : p->key;
  108. return valorNo + soma_nao_folhas(p->left) + soma_nao_folhas(p->right);
  109. }
  110.  
  111.  
  112. int main() {
  113.  
  114. Arvore *p = NULL;
  115. char a;
  116. int n, i = 0;
  117. int qtd, qtd01;
  118.  
  119. while(1) {
  120. scanf("%d", &n);
  121. p = insere(p, n);
  122. scanf("%c", &a);
  123. if(a == '\n') {
  124. break;
  125. }
  126.  
  127. }
  128.  
  129. //mostrar(p);
  130.  
  131. qtd = soma_folhas(p);
  132. qtd01 = soma_nao_folhas(p);
  133.  
  134. printf("\n\n%d %d\n", qtd, qtd01);
  135.  
  136. libera(p);
  137.  
  138.  
  139.  
  140.  
  141.  
  142. return 0;
  143. }
  144.  
Success #stdin #stdout 0s 4312KB
stdin
1 2 3 4 5 6 7 8 9 10
stdout

10 45