public void SetRaiz(No r)
public void Add(int valor, No r)
public void PreOrdem(No n)
Console.WriteLine(n.GetDado());
public void PosOrdem(No n)
Console.WriteLine(n.GetDado());
public void EmOrdem(No n)
Console.WriteLine(n.GetDado());
public void Print(No root, string prefix)
Console.WriteLine(prefix + "| ");
Console.WriteLine(prefix + "+- " + root.GetDado());
Print(root.esq, prefix + "| ");
Print(root.dir, prefix + "| ");
public void PrintNo(No n)
string print = (n == null)? "null" : n.GetDado().ToString();
Console.WriteLine(print);
public int NumeroNos(No r)
return (r == null)? 0 : NumeroNos(r.esq) + 1 + NumeroNos(r.dir);
public void BuscaPreOrdem(No n, int valor)
BuscaPreOrdem(n.esq, valor);
BuscaPreOrdem(n.dir, valor);
private int Max(int esq, int dir)
return esq > dir ? esq : dir;
public int Altura(No atual)
int esq = Altura(atual.esq);
int dir = Altura(atual.dir);
public int FatorBalanceamento(No atual)
int l = Altura(atual.esq);
int r = Altura(atual.dir);
public void AddAVL(int valor)
No newItem = new No(valor);
raiz = InserirRecursivo(raiz, newItem);
public No InserirRecursivo(No atual, No n)
else if(n.GetDado() < atual.GetDado())
atual.esq = InserirRecursivo(atual.esq, n);
atual = BalancearArvre(atual);
else if(n.GetDado() > atual.GetDado())
atual.dir = InserirRecursivo(atual.dir, n);
atual = BalancearArvre(atual);
private No BalancearArvre(No atual)
int bFactor= FatorBalanceamento(atual);
if(FatorBalanceamento(atual.esq) > 0)
atual = RotacaoEE(atual);
atual = RotacaoED(atual);
if(FatorBalanceamento(atual.dir) > 0)
atual = RotacaoDE(atual);
atual = RotacaoDD(atual);
private No RotacaoDD(No parent)
private No RotacaoEE(No parent)
private No RotacaoED(No parent)
parent.esq = RotacaoDD(pivot);
return RotacaoEE(parent);
private No RotacaoDE(No parent)
parent.dir = RotacaoEE(pivot);
return RotacaoDD(parent);
public static void Main()
arvre.Print(arvre.GetRaiz(), "");
Console.WriteLine(arvre.NumeroNos(arvre.GetRaiz()));