Класс для построения Binary Tree

Язык C#: программирование на C#, портирование кода C# на VB и VB на C#.

Модератор: Ramzes

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Класс для построения Binary Tree

Сообщение Thomas » 03.04.2006 (Пн) 8:40

Приветствую всех!

Вот озадачили нас в школе написанием класса построения бинарного дерева.
Задание я вроде выполнил. Но что-то там не так. А сам углядеть не могу. :oops: И время уже поджимает.

Посмотрите, покритикуйте, укажите на ошибки.

Код: Выделить всё

using System;
using System.Collections;

namespace Oef18_BinaryTree_
{   
   public class clKnoop       //knoop=узел
   {
      
      //attributen
      private IComparable key;
      private Object data;           //переменная data типа Object
      private clKnoop knptLeft;    //левый узел
      private clKnoop knptRight;   //правый узел
      private clKnoop knptParent;  //родительский узел, текущего узла
      //constructors
      public clKnoop()
      {
         knptLeft=null;
         knptRight=null;
         knptParent=null;

      }

      public clKnoop(IComparable sleutel, Object objData)
      {
         key=sleutel; //sleutel = ключ
         data=objData;
         knptLeft=null;
         knptRight=null;
         knptParent=null;
      }

      //methods
      //
      //процудура добавляем узел, параметры: ключ, данные типа Object
      public void Add(IComparable sl, Object info) // sl = ключ
      {
         int result=0;
         //создали экземпляр класса узел
         clKnoop node=new clKnoop();
         //сделали его текущим узлом
         clKnoop curent=this;
         //пка текущий узел не ноль
         while(curent!=null)
         {
            //присвоили текущее значение свойству узла
            node.knptParent=curent;
            //сравнили значение ключа со значением ключа текущего узла
            result=sl.CompareTo(curent.key);
            //если ключ больше текущего идем на право
            if(result>0)
               curent=curent.knptRight;
            // или если меньше идем на лево
            else
               curent=curent.knptLeft;               
         }
         //переопределяем значение ключа для сравнения.
         node.key=sl;
         //записываем данные в текущий узел.
         node.data=info;
         //если родительский узел существует, то
         if(node.knptParent!=null)
         {
            //сравниваем ключ узла с ключом родителя
            result=node.key.CompareTo(node.knptParent.key);
         }
         // в результате сравнения переопределяем узел
         if(result>0)
            node.knptParent.knptRight=node;
         else
            node.knptParent.knptLeft=node;

      }
      public object GetData(IComparable sleutel)
      {
         int result;
         Object info=null;
         clKnoop treenode=this;
         while(treenode!=null && info==null)
         {
            result=sleutel.CompareTo(treenode.key);
            if(result==0)
               info=treenode.data;
            if(result<0)
               treenode=treenode.knptLeft;
            else
               treenode=treenode.knptParent;
         }
         return info;
      }

   }
}


Заранее спасибо.
Последний раз редактировалось Thomas 24.04.2006 (Пн) 13:39, всего редактировалось 1 раз.

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 05.04.2006 (Ср) 17:54

Приветствую всех.
Вот нашел тут статью про бинарные деревья, называется так:
"Всестороннее изучение структур данных с
использованием C# 2.0
Часть III: Бинарные деревья и бинарные деревья
поиска (BST)"

Там приводиться такой код класса:


Код: Выделить всё

public class Node<T>
{
// Приватные переменные класса
private T data;
private NodeList<T> neighbors = null;
public Node() {}
public Node(T data) : this(data, null) {}
public Node(T data, NodeList<T> neighbors)
{
     this.data = data;
     this.neighbors = neighbors;
}
public T Value
{
     get
   {
     return data;
   }
     set
   {
     data = value;
   }
}
protected NodeList<T> Neighbors
{
     get
   {
     return neighbors;
   }
    set
   {
     neighbors = value;
}
}
}
}


У меня вопрос, а что означают такие записи:
Node<T>
NodeList<T>
что это за нотация такая <T>?
У меня VS 2003 и это не понимает.
Если это нововведения из 2005, то можно ли обойтись без них в 2003 студии?

Всем спасибо.

Кстати может кто подскажет как мне проверить через GUI работу класса построения бинарного дерева(из предыдущего поста). Что-то я никак не соображу
:oops:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 05.04.2006 (Ср) 18:01

Это нововведения из 2005. Называются шаблонами.
Без них в 2003 студии обойтись тяжело: нужно все T заменить на object и правильно кастовать перед использованием.
Изображение

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 05.04.2006 (Ср) 19:51

tyomitch
Спасибо.
2005 студию будем осваивать в сентябре, а этот год доучиваемся на 2003.
:D

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 08.04.2006 (Сб) 14:49

tyomitch

А можно еще вопрос.
Посдскажи как правильно интерпретировать такое выражение:

public Node(T data) : this(data, null) {}

":" по моему означает наследование, если не ошибаюсь
зарезервированное слово this обозначает обьект?(экземпляр класса?)
В VB там к примеру используем "ме" и это относиться к контролу, на пример к активной форме. Ме.txtTest.Text="test"
В C# в аналогичной ситуации нужно писать this.txtTest.Text="test";
В отношении формы понятно
А вот в отношении класса? Что это означает?
кстати можно встретить и такую запись
бла-бла : base (бла, бла)

Поясни студенту если не трудно

С самыми наилучшими.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.04.2006 (Сб) 15:01

Справка рулит.
http://msdn.microsoft.com/library/en-us ... uctors.asp

Thomas писал(а):В отношении формы понятно
А вот в отношении класса? Что это означает?

:roll:
Thomas
Ведь давно спрашиваешь по C#.
Как можно давно изучать C# и не знать, что форма есть класс? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 10.04.2006 (Пн) 9:28

GSerg

Приветствую.
Что форма является классом я знаю.
Просто с формой оно понятнее. Вот есть форма и в коде ее можно обозначить зарезервированными словами me, this. Особенно это удобно когда в проекте несколько форм.

За ссылку на msdn спасибо. Русской справкой я пользуюсь регулярно и вроде успешно. Но она больше по VB. А с английской мне трудно. Фламанский я знаю неплохо, а с ангийским пока беда. :(

Про base я вроде понял. Так обозначают класс от которого наследует этот. Правильно?

А вот эту строку я пока не понял. :oops:

public Node(T data) : this(data, null) {}

до двоеточия прописан конструктор класса с одним параметром.
двоеточие обозначает наследование
this обозначает этот класс, далее два параметра.

И что получается, класс Node сам себя наследует что ли?
Вот это я не понял и попросил разьяснить.

ЗЫ посмотрел последний топик на VB.NET и принял к сведению. Постараюсь быть осмотрительнее.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.04.2006 (Пн) 9:39

Thomas писал(а):А вот эту строку я пока не понял. :oops:

public Node(T data) : this(data, null) {}

до двоеточия прописан конструктор класса с одним параметром.
двоеточие обозначает наследование
this обозначает этот класс, далее два параметра.

И что получается, класс Node сам себя наследует что ли?
Вот это я не понял и попросил разьяснить.

То, что двоеточие написано у объявления конструктора, а не класса, означает, что наследуется конструктор, а не класс.
И действительно, он наследуется сам у себя.
Так понятнее?
Изображение

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 10.04.2006 (Пн) 10:03

tyomitch
Благодарю.


Вернуться в C#

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList  
cron