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; } } } }