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. int main() {
  89.  
  90. Arvore *p = NULL;
  91. char a;
  92. int n, i = 0;
  93. int qtd, qtd01;
  94.  
  95. while(1) {
  96. scanf("%d", &n);
  97. p = insere(p, n);
  98. scanf("%c", &a);
  99. if(a == '\n') {
  100. break;
  101. }
  102.  
  103. }
  104.  
  105. qtd = procurafolha(p);
  106. qtd01 = procurasemfolha(p);
  107.  
  108. printf("\n\n%d %d\n", qtd, qtd01);
  109.  
  110. libera(p);
  111.  
  112. return 0;
  113. }
  114.  
Success #stdin #stdout 0s 4516KB
stdin
1 2 3 4 5 6 7 8 9 10
stdout

10 45