什么是建模treeNode的更好方法?

时间:2014-06-25 15:02:10

标签: f# treenode

以下两种创建树节点的方法有哪些优点和缺点?

type TreeNode = | TreeNode of int * (TreeNode option) * (TreeNode option) * (TreeNode option)



type Node = | Node of int * Node * Node

        | None

1 个答案:

答案 0 :(得分:3)

它们非常接近,但不完全相同。实际上你可以很好地使用数学推理函数类型(参见例如my recent article),但你甚至可以非正式地看到它。

鉴于任何TreeNode(num, optLeft, optRight),您始终可以创建包含相同信息的Node(选项类型的None将映射到Node.None)。

有趣的是,这并不是相反的。如果有人向您提供Node.None,则无法将其转换为TreeNode,因为TreeNode根目录中至少需要一个整数。

所以,它们是等价的,除了第二个允许空树。从实际角度来看,第二种类似乎更容易使用(因为你只需要在一个地方处理空树)。