作成者の詳細を含む AVLTree であるソフトウェア製品を作成しています。Author クラスには、Name、Year Of Publish、List of Books (LinkedList<> コレクションを使用) が含まれます。Author オブジェクトは、名前を比較のキーとして AVLTree に格納されます。
私の問題は、Author クラスを AVLTree に正しく格納できないように見えることです。
アドバイスや助けに感謝します。
Author 配列を作成し、AVLTree を作成します。
public Author[] author = new Author[i];
public AVLTree<Author> authorAVL = new AVLTree<Author>();
「著者の追加」ボタンのコードは次のとおりです。
author[i].Name = textBoxAddAuthor.Text;
author[i].YrOfPub = textBoxYrOfPub.Text;
author[i] = new Author(author[i].Name, author[i].YrOfPub);
Array.Sort(author);
authorAVL.InsertItem(artist[i]);
次のように、 Author クラスに CompareTo を実装しました。
public int CompareTo(object obj)
{
if (obj is Author) //compare by name
{
Author other = (Author)obj;
return name.CompareTo(other.name);
}
AVLTree の InsertItem メソッドは次のようになります。
public void InsertItem(T item)
{
insertItem(item, ref root);
}
private void insertItem(T item, ref Node<T> tree)
{
if (tree == null)
tree = new Node<T>(item);
else if (item.CompareTo(tree.Data) < 0)
insertItem(item, ref tree.Left);
else if (item.CompareTo(tree.Data) > 0)
insertItem(item, ref tree.Right);
tree.BalanceFactor = (height(tree.Left) - height(tree.Right));
if (tree.BalanceFactor <= -2)
rotateLeft(ref tree);
if (tree.BalanceFactor >= 2)
rotateRight(ref tree);
}
ノードクラスには次のものが含まれます。
public class Node<T> where T : IComparable
{
private T data;
public Node<T> Left, Right;
private int balanceFactor = 0;
public Node(T item)
{
data = item;
Left = null;
Right = null;
}
public T Data
{
set { data = value; }
get { return data; }
}
public int BalanceFactor
{
set { balanceFactor = value; }
get { return balanceFactor; }
}
}