Эти свойства используются для разных вещей.Как следует из их названия:
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
.