计划二叉搜索树添加元素
Scheme Binary Search Tree Adding Elements
首先,我想编写一个函数:
接受:
一个自然数列表,(list 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)))]))
问题
我目前正在努力使它适用于嵌套列表;例如 (list (list 1) (list 2)...),每个子列表中只有一个元素。但是,它似乎不起作用并且 bst-add 中的 (first sublst) 将 sublst 转换为数字,例如 (first 1).
我想我以前在其他代码中也有过类似的错误,但我不记得是什么时候出现的错误了。
现在你有
(define (recurse-lst bst lst)
(cond [(empty? roster)
....
"lst
".
"roster
".
您需要始终在 SO 上的帖子中包含您的错误消息。
接下来。你调用 (bst-add bst (first lst))
所以那个调用中的第二个参数已经是一个数字。但是在 bst-add
的定义中,您将第二个参数命名为“sublst
”并将其视为列表。无需再服用 first
。事实上,取 first
一个数字是错误的。
首先,我想编写一个函数:
接受:
一个自然数列表,
(list 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)))]))
问题
我目前正在努力使它适用于嵌套列表;例如 (list (list 1) (list 2)...),每个子列表中只有一个元素。但是,它似乎不起作用并且 bst-add 中的 (first sublst) 将 sublst 转换为数字,例如 (first 1).
我想我以前在其他代码中也有过类似的错误,但我不记得是什么时候出现的错误了。
现在你有
(define (recurse-lst bst lst)
(cond [(empty? roster)
....
"lst
".
"roster
".
您需要始终在 SO 上的帖子中包含您的错误消息。
接下来。你调用 (bst-add bst (first lst))
所以那个调用中的第二个参数已经是一个数字。但是在 bst-add
的定义中,您将第二个参数命名为“sublst
”并将其视为列表。无需再服用 first
。事实上,取 first
一个数字是错误的。