public void insere(int n, ref Arvore raiz) { Arvore temp, subarv; this.info = n; maxnivel = aux = maxnivelb = auxb = 0; if (raiz == null) raiz = this; else { temp = raiz; while (temp != null) { subarv = temp; if (n <= temp.info) { temp = temp.SAE; if (temp == null) subarv.SAE = this; } else { temp = temp.SAD; if (temp == null) subarv.SAD = this; } } } }
static void Main(string[] args) { int op, n; Arvore arv, raiz = null; do { menu(); op = int.Parse(Console.ReadLine()); Console.Clear(); switch (op) { case 1: Console.Write("Digite um valor para ser inserido : "); n = int.Parse(Console.ReadLine()); arv = new Arvore(); arv.insere(n, ref raiz); raiz.calculaAvl(); break; case 2: Console.Write("Digite um valor para ser buscado : "); n = int.Parse(Console.ReadLine()); if (raiz != null) { int i = raiz.pesquisa(n); if (i != -1) Console.WriteLine("O numero foi encontrado no nivél {0}", i); else Console.WriteLine("O numero não foi encontrado"); } else Console.WriteLine("Não existem niveis para serem exibidos"); Console.ReadKey(); break; case 3: if (raiz != null) raiz.preOrdem(); else Console.WriteLine("Não existem niveis para serem exibidos"); Console.ReadKey(); break; case 4: if (raiz != null) raiz.posOrdem(); else Console.WriteLine("Não existem niveis para serem exibidos"); Console.ReadKey(); break; case 5: if (raiz != null) raiz.inOrdem(); else Console.WriteLine("Não existem niveis para serem exibidos"); Console.ReadKey(); break; case 6: if (raiz != null) raiz.emNivel(); else Console.WriteLine("Não existem niveis para serem exibidos"); Console.ReadKey(); break; case 7: int maxnivel = 0; ; int aux = 0; if (raiz != null) Console.WriteLine("A altura da atual arvore é : {0}", raiz.altura(ref aux, ref maxnivel)); else Console.WriteLine("Arvore sem altura para ser exibida"); Console.ReadKey(); break; case 8: if (raiz != null) { bool avl = raiz.isAvl(); if (avl) Console.WriteLine("Arvore Balanceada"); else Console.WriteLine("Arvore Não Balanceada"); } else Console.WriteLine("Arvore vazia"); Console.ReadKey(); break; case 96: int[] valores96 = new int[] { 5, 4, 6, 3, 7, 8, 9 }; for (int i = 0; i < valores96.Length; i++) { arv = new Arvore(); arv.insere(valores96[i], ref raiz); raiz.calculaAvl(); } break; case 97: int[] valores97 = new int[] { 100, 90, 150, 130, 160, 170, 180 }; for (int i = 0; i < valores97.Length; i++) { arv = new Arvore(); arv.insere(valores97[i], ref raiz); raiz.calculaAvl(); } break; case 98: //Preenchimento automatico para teste int[] valores98 = new int[] { 6, 2, 8, 1, 4, 7, 9, 3, 5 }; for (int i = 0; i < valores98.Length; i++) { arv = new Arvore(); arv.insere(valores98[i], ref raiz); } break; case 99: //Preenchimento automatico para teste int[] valores99 = new int[] { 50, 45, 60, 43, 47, 42, 44, 49, 48 }; for (int i = 0; i < valores99.Length; i++) { arv = new Arvore(); arv.insere(valores99[i], ref raiz); } break; } } while (op != 9); }
public Arvore() { info = fb = 0; SAE = SAD = null; }