Esempio n. 1
0
        internal Comparador <T> comparador; //una de las propiedades del arbol es el comparador

        public void Add(T dato)
        {
            if (root == null)
            {
                root       = new Nodo <T>();
                root.Value = dato;
            }
            else
            {
                if (comparador.Invoke(root.Value, dato) > 0) //si es currentroot es mayor que el dato
                {
                    if (root.Left == null)                   //si no hay nada guardado que guarde el nuevo.
                    {
                        root.Left       = new Nodo <T>();
                        root.Left.Value = dato;
                    }
                    else
                    {
                        Add(dato, root.Left); //recursividad, para que vaya al siguiente nivel y encuentre donde agregarlo.
                    }
                }
                if (comparador.Invoke(root.Value, dato) < 0) //si es currentroot es menor que el dato
                {
                    if (root.Right == null)                  //si no hay nada guardado que guarde el nuevo.
                    {
                        root.Right       = new Nodo <T>();
                        root.Right.Value = dato;
                    }
                    else
                    {
                        Add(dato, root.Right); //recursividad, para que vaya al siguiente nivel y encuentre donde agregarlo.
                    }
                }
            }
        }
        public void ComprobarOrden(Nodo <T> CurrentRoot)
        {
            if (CurrentRoot.Left.Value != null || CurrentRoot.Right.Value != null)
            {
                Nodo <T> Temp = new Nodo <T>();
                Temp.Value = CurrentRoot.Value;


                if (CurrentRoot.Left.Value != null)
                {
                    if (comparador.Invoke(CurrentRoot.Left.Value, CurrentRoot.Value) == -1)
                    {
                        CurrentRoot.Value      = CurrentRoot.Left.Value;
                        CurrentRoot.Left.Value = Temp.Value;
                    }
                }
                if (CurrentRoot.Right.Value != null)
                {
                    if (comparador.Invoke(CurrentRoot.Right.Value, CurrentRoot.Value) == -1)
                    {
                        CurrentRoot.Value       = CurrentRoot.Right.Value;
                        CurrentRoot.Right.Value = Temp.Value;
                    }
                }
            }
        }