【发布时间】:2017-03-25 00:41:00
【问题描述】:
我正在尝试从给定的树中找到最大数量:
(define-struct (Some T)
([value : T]))
(define-type (Option T)
(U 'None (Some T)))
(define-type BST (U 'E Nd))
(define-struct Nd
([root : Integer]
[lsub : BST]
[rsub : BST]))
(: maxi : BST Integer -> Integer)
(define (maxi x acc)
(match x
('E acc)
((Nd ro ls rs)
(cond
((> ro acc) (maxi ls ro))
(else
(maxi rs acc))))))
当我输入以下内容时,上面的引用无法正常工作:
(最大值(Nd 1(Nd 2(Nd 4(Nd 8'E'E)(Nd 9'E'E))(Nd 5'E'E)))(Nd 3(Nd 6'E'E) ) (Nd 7 'E 'E))) 0)
有人可以帮忙吗?
谢谢!
【问题讨论】:
-
预期输出是什么?返回的是什么?你试过trace吗?
-
预期输出为 9,但我得到 8
-
这种树的重点是它会被排序,因此最深的右节点将保持最大值,但是你的树没有排序,所以我认为你的示例数据可能是错误的。如果此节点大于父节点并忽略右侧节点,您的代码似乎跟随左侧,或者只是跟随右侧节点而不考虑左侧。这没有任何意义。
-
(不 lisp 提供 code comments?)
BST以及cond似乎暗示 二叉搜索树,构造的示例不是.
标签: functional-programming scheme lisp racket typed-racket