以下两种创建树节点的方法有哪些优点和缺点?
type TreeNode = | TreeNode of int * (TreeNode option) * (TreeNode option) * (TreeNode option)
type Node = | Node of int * Node * Node
| None
答案 0 :(得分:3)
它们非常接近,但不完全相同。实际上你可以很好地使用数学推理函数类型(参见例如my recent article),但你甚至可以非正式地看到它。
鉴于任何TreeNode(num, optLeft, optRight)
,您始终可以创建包含相同信息的Node
(选项类型的None
将映射到Node.None
)。
有趣的是,这并不是相反的。如果有人向您提供Node.None
,则无法将其转换为TreeNode
,因为TreeNode
根目录中至少需要一个整数。
所以,它们是等价的,除了第二个允许空树。从实际角度来看,第二种类似乎更容易使用(因为你只需要在一个地方处理空树)。