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

tal*_*tal 1 tree binary-tree haskell

我被要求为以下二进制树实现一个功能:

data BinaryTree a = Nil | BNode a (BinaryTree a) (BinaryTree a) 
Run Code Online (Sandbox Code Playgroud)

我需要实现的功能应该产生一个完整的,对称的,无限的二进制树a,并且具有以下特征:

infTree :: a -> BinaryTree a
Run Code Online (Sandbox Code Playgroud)

我该如何实施?

4ca*_*tle 7

您可以创建一个循环引用,其中两个子节点均为父节点。

infTree :: a -> BinaryTree a
infTree x = tree
  where
    tree = BNode x tree tree
Run Code Online (Sandbox Code Playgroud)

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

repeat :: a -> [a]
repeat x = xs where xs = x : xs
Run Code Online (Sandbox Code Playgroud)

  • 由于该值具有自引用性质,因此它是一棵无限树,被*编码为内存中的单个节点。 (4认同)
  • @tal如果您尝试查找此树中的节点数,则会导致无限循环,因为它永远不会达到“ Nil”。 (3认同)
  • 或者:`infTree x = fix(join(BNode x))`,它简化为`infTree = fix。加入。BNode` (2认同)