Advertisement
Guest User

Max e Minimos Arvore

a guest
Dec 16th, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<string.h>
  4.  
  5. struct no
  6. {
  7. char chave[20];
  8. struct no *pai;
  9. struct no *esquerda;
  10. struct no *direita;
  11. };
  12.  
  13. typedef struct no No;
  14.  
  15. No *raiz;
  16.  
  17. No *criar_no(char c[])
  18. {
  19. No* novo = (No*) malloc(sizeof(No) );
  20. strcpy(novo->chave, c);
  21. novo->pai = NULL;
  22. novo->esquerda = NULL;
  23. novo->direita = NULL;
  24. return novo;
  25. }
  26.  
  27. void inserir(char dado[])
  28. {
  29. No *novo = criar_no(dado);
  30.  
  31. No *y = NULL;
  32. No *x = raiz;
  33.  
  34. if(raiz == NULL)
  35. {
  36. printf("%s inserido na raiz\n", novo->chave);
  37. raiz = novo;
  38. }
  39. else
  40. {
  41. while(x != NULL)
  42. {
  43. y = x;
  44. if(strcmp(novo->chave,x->chave)<0)
  45. x = x->esquerda;
  46.  
  47. else if(strcmp(novo->chave,x->chave)>0)
  48. x = x->direita;
  49. }
  50. if(strcmp(novo->chave, y->chave)<0)
  51. {
  52. printf("%s inserido a esquerda de %s\n", novo->chave, y->chave);
  53. y->esquerda = novo;
  54. novo->pai = y;
  55. }
  56. else if(strcmp(novo->chave, y->chave)>0)
  57. {
  58. printf("%s inserido a direita de %s\n", novo->chave, y->chave);
  59. y->direita= novo;
  60. novo->pai = y;
  61. }
  62. }
  63.  
  64. }
  65.  
  66.  
  67. void em_order(No*raiz)
  68. {
  69. if(raiz!=NULL)
  70. {
  71. em_order(raiz->esquerda);
  72. printf("%s",raiz->chave);
  73. em_order(raiz->direita);
  74. }
  75. }
  76.  
  77. No*busca(No*raiz,char k[])
  78. {
  79. if(raiz==NULL ||strcmp(raiz->chave,k)==0)
  80. {
  81. return raiz;
  82. }
  83. if(strcmp(k,raiz->chave)<0)
  84. {
  85. return busca(raiz->esquerda,k);
  86. }
  87. else
  88. {
  89. return busca(raiz->direita,k);
  90. }
  91. }
  92.  
  93.  
  94. void min(No*raiz)
  95. {
  96. while(raiz->esquerda!=NULL)
  97. {
  98. raiz=raiz->esquerda;
  99. return raiz;
  100. }
  101. }
  102. void max(No*raiz)
  103. {
  104. while(raiz->direita!=NULL)
  105. {
  106. raiz=raiz->direita;
  107. return raiz;
  108. }
  109. }
  110.  
  111. int main()
  112. {
  113. raiz = NULL;
  114.  
  115. char dado[20];
  116.  
  117. strcpy(dado,"c");
  118. inserir(dado);
  119. strcpy(dado,"a");
  120. inserir(dado);
  121. strcpy(dado,"b");
  122. inserir(dado);
  123. strcpy(dado,"coisa");
  124. //strcpy(dado,"c");
  125. //inserir(raiz, dado);insere mais dados
  126.  
  127. No*no=(busca(raiz,dado));
  128. {
  129. if(no==NULL)
  130. {
  131. printf("\nNao achou");
  132. }
  133. else
  134. {
  135. printf("\n Achou");
  136. }
  137.  
  138. }
  139.  
  140.  
  141.  
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement