Debugging 添加元素的二叉搜索树方案

Debugging 添加元素的二叉搜索树方案,debugging,tree,scheme,racket,Debugging,Tree,Scheme,Racket,首先,我想编写一个函数: 接受: 自然数的列表,(列表2 6 1 23…,其中可能包含称为“lst”的重复元素 称为“bst”的随机二叉搜索树 输出: 一个更新的二叉树,将列表中的每个数字都添加到其中 代码 (define (recurse-lst bst lst) (cond [(empty? roster) empty] [(empty? lst) empty] [else (recurse-lst (bst-add bst (first ls

首先,我想编写一个函数:

接受:

  • 自然数的列表,
    (列表2 6 1 23…
    ,其中可能包含称为“lst”的重复元素

  • 称为“bst”的随机二叉搜索树

输出:

  • 一个更新的二叉树,将列表中的每个数字都添加到其中
代码

(define (recurse-lst bst lst)
  (cond [(empty? roster) empty]
        [(empty? lst) empty]
        [else (recurse-lst (bst-add bst (first lst)) (rest lst))]))

; helper function
(define (bst-add bst sublst)
  (cond [(empty? bst) (make-node (first sublst) empty empty)]
        [(< (first sublst) (node-key bst))
         (make-node (node-key bst)
                    (bst-add (node-left bst) (first sublst))
                    (node-right bst))]
        [else
         (make-node (node-key bst) (node-left bst)
                    (bst-add (node-right bst) (first sublst)))]))
(定义(递归lst bst lst)
(条件[(空?花名册)空]
[(空?lst)空]
[否则(递归lst(bst添加bst(第一个lst))(剩余lst))])
; 辅助函数
(定义(bst添加bst子列表)
(cond[(空?bst)(使节点(第一个子ST)为空)]
[(<(第一个子列表)(节点键bst))
(生成节点(节点键bst)
(bst添加(节点左侧bst)(第一个子ST))
(节点右侧bst))]
[其他
(生成节点(节点键bst)(节点左bst)
(bst添加(节点右侧bst)(第一个子ST)))])
问题

我目前正试图让它在嵌套列表中工作;例如(列表(列表1)(列表2)…),每个子列表中只有一个元素。但是,它似乎不起作用,bst add中的(第一个子列表)将子列表转换为一个数字,如(第一个1)

我想我以前在其他代码中也遇到过类似的错误,但我记不起它是什么时候出现的。

现在你有了

(define (recurse-lst bst lst)
   (cond [(empty? roster)
       ....
lst

花名册

您需要始终在SO上的帖子中包含错误消息

下一个。您调用
(bst add bst(first lst))
,因此该调用中的第二个参数已经是一个数字。然而,在
bst的定义中,add
将第二个参数命名为“
sublst
”,并将其视为一个列表。无需先服用
,再服用
。事实上,先取一个数字的
是一个错误。

现在你有了

(define (recurse-lst bst lst)
   (cond [(empty? roster)
       ....
lst

花名册

您需要始终在SO上的帖子中包含错误消息


下一个。您调用
(bst add bst(first lst))
,因此该调用中的第二个参数已经是一个数字。然而,在
bst的定义中,add
将第二个参数命名为“
sublst
”,并将其视为一个列表。无需先服用
,再服用
。事实上,先取一个数字的
是一个错误。

是的,它会。您已经回答了自己的问题。谢谢!很高兴知道。我再次测试了我的程序,它运行良好。太棒了!您可以在此处发布您自己的答案和工作代码,然后接受,以表示问题已解决。:)@很抱歉,这件事又发生了,我把事情搞砸了。我这样做是为了嵌套列表中只有一个元素的嵌套列表。然而,该计划失败了。我已经更新了问题中的代码。我想就此提出一个新问题,但我觉得它们关系太密切了。我已经回答了。对于未来的问题,请发表新的帖子:)是的,会的。您已经回答了自己的问题。谢谢!很高兴知道。我再次测试了我的程序,它运行良好。太棒了!您可以在此处发布您自己的答案和工作代码,然后接受,以表示问题已解决。:)@很抱歉,这件事又发生了,我把事情搞砸了。我这样做是为了嵌套列表中只有一个元素的嵌套列表。然而,该计划失败了。我已经更新了问题中的代码。我想就此提出一个新问题,但我觉得它们关系太密切了。我已经回答了。对于未来的问题,请发表新的帖子:)是的,我意识到先走是个错误。步进/调试器显示了问题。谢谢你的澄清!是的,我意识到先走是个错误。步进/调试器显示了问题。谢谢你的澄清!