我是C#的新手,我正在完成John Sharp写的《 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; }
有人可以解释我为什么?谢谢
答案 0 :(得分:2)
这些属性用于不同的事物。顾名思义:
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
属性之间的根本区别。
答案 1 :(得分:0)
他定义了一棵树。 NodeData属性是当前节点值。然后,如果该值小于当前节点,则将新值放在左侧,否则在右侧。如果LeftValue和RightValue的类型为Tree,则它将具有父子结构。此类允许创建类似二叉树的数据结构。