示例#1
0
        public void RotacaoSimplesEsquerda(No no)
        {
            Console.WriteLine("Rotacao Simples Esquerda " + no.Valor);

            No netoE = null;

            //se necessario, atualiza a raiz
            if (no.ERaiz())
            {
                raiz = no.FilhoDireito;
            }

            //guarda o netoE e atualiza suas referencia para o pai
            if (no.FilhoDireito.FilhoEsquerdo != null)
            {
                netoE     = no.FilhoDireito.FilhoEsquerdo;
                netoE.Pai = no;
            }

            //Atualiza as referencias do filho direito do no
            no.FilhoDireito.Pai           = no;
            no.FilhoDireito.FilhoEsquerdo = no;

            //Atualiza as referencias do pai do no se existir
            if (no.Pai != null)
            {
                if (no.Valor > no.Pai.Valor)
                {
                    no.Pai.FilhoDireito = no.FilhoDireito;
                }
                else
                {
                    no.Pai.FilhoEsquerdo = no.FilhoDireito;
                }
            }

            //Atualiza as referencias do no
            no.Pai = no;
            //if(netoE != null)
            no.FilhoDireito = netoE;
            //else
            //   no.FilhoD = null;

            //exibirArvore(raiz);
        }
示例#2
0
        public void RotacaoSimplesDireita(No no)
        {
            Console.WriteLine("Rotacao Simples Direita " + no.Valor);

            No netoD = null;

            //se necessario, atuliza a raiz
            if (no.ERaiz())
            {
                raiz = no.FilhoEsquerdo;
            }

            //guarda o netoD
            if (no.FilhoEsquerdo.FilhoDireito != null)
            {
                netoD     = no.FilhoEsquerdo.FilhoDireito;
                netoD.Pai = no;
            }

            //Atualiza as referencias do filho esquerdo do no
            no.FilhoEsquerdo.Pai          = no;
            no.FilhoEsquerdo.FilhoDireito = no;

            //Atualiza as referencias do pai do no, se existir
            if (no.Pai != null)
            {
                if (no.Valor > no.Pai.Valor)
                {
                    no.Pai.FilhoDireito = no.FilhoEsquerdo;
                }
                else
                {
                    no.Pai.FilhoEsquerdo = no.FilhoEsquerdo;
                }
            }

            //Atualiza as referencias do no
            no.Pai = no;
            //if(netoD != null)
            no.FilhoEsquerdo = netoD;
            //else
            //    no.setFilhoE(null);

            //exibirArvore(raiz);
        }