예제 #1
0
 public static bool ArbolVacio(BTNode <T> node) => node == null;
예제 #2
0
        /// <summary>
        /// Método que Divide un nodo en nodos nuevos al momento que se llena un nodo
        /// </summary>
        /// <param name="x"></param>Clave a insertar
        /// <param name="Xder"></param>
        /// <param name="P"></param>Nodo sucesor
        /// <param name="K"></param> Posición donde debe insertarse la nueva clave
        /// <param name="Mda"></param>Clave que sube como nuevo padre de los nodos creados
        /// <param name="Mder"></param>Nuevo nodo donde van los valores mayores a la media
        private void DividirNodo(T x, BTNode <T> Xder, BTNode <T> P, int K, ref T Mda, ref BTNode <T> Mder)
        {
            int posmda;

            posmda = K <= Min ? Min : Min + 1;
            Mder   = new BTNode <T>(); //nuevo nodo
            for (int i = posmda + 1; i < Orden; i++)
            {
                Mder.Values[i - posmda]   = P.Values[i]; // es desplaza la mitad derecha del nuevo nodo, la clave mediana se queda en la izquierda
                Mder.Children[i - posmda] = P.Children[i];
            }
            Mder.Cuenta = Max - posmda; // claves en el nuevo nodo
            P.Cuenta    = posmda;       // claves que quedan en el nodo original
            //Inserción de X y la rama derecha
            if (K <= Orden / 2)
            {
                MeterHoja(x, Xder, P, K); // inserta nodo en izquierda
            }
            else
            {
                var newval = K - posmda;
                MeterHoja(x, Xder, Mder, newval);
            }//extrae mediana del nodo izquierdo
            Mda = P.Values[P.Cuenta];
            Mder.Children[0] = P.Children[P.Cuenta]; // Rama Inicial del nuevo nodo es la rama de la mediana
            P.Cuenta         = P.Cuenta - 1; // disminuye por que se quitó el valor medio
        }
예제 #3
0
 public Btree()
 {
     root = null;
 }
예제 #4
0
 public BTNode()
 {
     Values   = new T[5];
     Children = new BTNode <T> [5];
     Cuenta   = 0;
 }
예제 #5
0
 public override void AddChild(BTNode _childNode)
 {
     base.AddChild(_childNode);
     mChildrenResults.Add(BTResult.Executing);
 }
예제 #6
0
 public BTParallel(BTNode _parentNode, BTPrecondition _precondition = null)
     : base(_parentNode, _precondition)
 {
 }
예제 #7
0
 public BTDecorator(BTNode _parentNode, BTPrecondition _precondition = null)
     : base(_parentNode, _precondition)
 {
     maxChild = 1;
 }
예제 #8
0
 public BTWeigthSelector(BTNode _parent, BTPrecondition _precondition = null) : base(_parent, _precondition)
 {
 }