如何产生一个无限的二叉树?

时间:2019-05-09 16:18:19

标签: haskell tree binary-tree

要求我为以下二进制树实现一个函数:

data BinaryTree a = Nil | BNode a (BinaryTree a) (BinaryTree a) 

我需要实现的功能应该产生a的完整,对称,无限的二叉树,并且应该具有签名:

infTree :: a -> BinaryTree a

我该如何实施?

1 个答案:

答案 0 :(得分:7)

您可以在两个子节点都是父节点的地方创建循环引用。

infTree :: a -> BinaryTree a
infTree x = tree
  where
    tree = BNode x tree tree

这与实现repeat函数的方式相同:

repeat :: a -> [a]
repeat x = xs where xs = x : xs