C # определение автоматических свойств в общем классе - PullRequest
0 голосов
/ 04 февраля 2019

Я новичок в C # и заканчиваю книгу «Microsoft Visual C # 2013 Step by Step», написанную Джоном Шарпом.В упражнении, касающемся «Обобщения», я нашел этот код:

public class Tree<TItem> where TItem : IComparable<TItem>
{
    public TItem NodeData { get; set; }
    public Tree<TItem> LeftTree { get; set; }
    public Tree<TItem> RightTree { get; set; }

    public Tree(TItem nodeValue)
    {
        this.NodeData = nodeValue;
        this.LeftTree = null;
        this.RightTree = null;
    }

    public void Insert(TItem newItem)
    {
        TItem currentNodeValue = this.NodeData;
        if (currentNodeValue.CompareTo(newItem) > 0)
        {
            // Insert the new item into the left subtree
            // code here....
        }
        else
        {
            // Insert the new item into the right subtree
            // code here....
        }
    }

}

Я не могу понять, почему он определил свойства в другом режиме.Один таким образом:

public TItem NodeData { get; set; }

А другие в этом:

public Tree<TItem> LeftTree { get; set; }
public Tree<TItem> RightTree { get; set; }

Кто-то может объяснить мне, почему?Спасибо

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Он определяет дерево.Свойство NodeData является текущим значением узла.Затем, если значение меньше текущего узла, новое значение помещается слева, в противном случае справа.Если типом LeftValue и RightValue является Tree, он должен иметь структуру parent-child.Этот класс позволяет создавать структуру данных, например, двоичное дерево.

0 голосов
/ 04 февраля 2019

Эти свойства используются для разных вещей.Как следует из их названия:

  • NodeData используется для облегчения информации, хранящейся в дереве.
  • LeftTree / RightTree для облегчения топологии дерева- каждый текущий объект (узел), по сути, является корнем дерева с корнем в себе.Так как это двоичное дерево, у него есть два прямых потомка - левый и правый узлы.

Где роль, которую играют дженерики, связана с типом данных, хранящихся в дереве.Таким образом, NodeData имеет тривиальный тип TItem.Левый и правый узлы имеют тип Tree<TItem>, поэтому для обеспечения того, чтобы на любой глубине дерева это были данные типа TItem, которые хранятся.

Для упрощения предположим, что вы хотелисоздать двоичное дерево целых чисел.Тогда вы бы смоделировали его следующим образом:

public class Tree 
{
    public int Data { get; set; }
    public Tree Left {get; set; }
    public Tree Right {get; set; }
}

Я думаю, таким образом вы действительно сможете увидеть, в чем принципиальная разница между свойствами Data и Left, Right.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...