Racket:给定卖家名称,以二叉树的形式打印出商品的销售结果
Racket: given the seller name, print the result of the products sold in a binary tree
代码的目标是当我输入卖家名称时,输出必须是所售产品的数量
(define-struct node (seller_info left_tree right_tree))
(define-struct seller (name quantity_sold))
(define treeSellers (make-node (make-seller "laura" 8)
(make-node (make-seller "pedro" 5)empty empty)
(make-node (make-seller "laura" 10)empty empty)
)
)
(define (addTree sellerName tree)
(cond
[(empty? tree) empty]
[(string=? sellerName (seller-name (node-seller_info tree)))
(+ (seller-quantity_sold (node-seller_info tree)))]
[else (addTree sellerName (node-left_tree tree))
(addTree sellerName (node-right_tree tree))]
)
)
输出必须是
(addTree "laura" treeSellers) 18
而是
(addTree "laura" treeSellers) 8
有什么建议可以使输出符合要求吗?
您的代码存在三个主要问题:
- 基本情况是错误的,你不能return
empty
,答案应该是一个数字,而不是一个列表。您必须在此处 return 归零。
- 一旦找到匹配项,就停止了递归 - 但可能还有更多匹配项,您必须继续查找。
- 在
else
的情况下,您没有将两个结果加在一起,实际上,您丢弃了左子树的值,仅 return 右子树的值。
这应该可以解决所有问题:
(define (addTree sellerName tree)
(cond
[(empty? tree) 0]
[(string=? sellerName (seller-name (node-seller_info tree)))
(+ (seller-quantity_sold (node-seller_info tree))
(addTree sellerName (node-left_tree tree))
(addTree sellerName (node-right_tree tree)))]
[else
(+ (addTree sellerName (node-left_tree tree))
(addTree sellerName (node-right_tree tree)))]))
现在它按预期工作了:
(addTree "laura" treeSellers)
=> 18
(addTree "pedro" treeSellers)
=> 5
(addTree "ivan" treeSellers)
=> 0
代码的目标是当我输入卖家名称时,输出必须是所售产品的数量
(define-struct node (seller_info left_tree right_tree))
(define-struct seller (name quantity_sold))
(define treeSellers (make-node (make-seller "laura" 8)
(make-node (make-seller "pedro" 5)empty empty)
(make-node (make-seller "laura" 10)empty empty)
)
)
(define (addTree sellerName tree)
(cond
[(empty? tree) empty]
[(string=? sellerName (seller-name (node-seller_info tree)))
(+ (seller-quantity_sold (node-seller_info tree)))]
[else (addTree sellerName (node-left_tree tree))
(addTree sellerName (node-right_tree tree))]
)
)
输出必须是
(addTree "laura" treeSellers) 18
而是
(addTree "laura" treeSellers) 8
有什么建议可以使输出符合要求吗?
您的代码存在三个主要问题:
- 基本情况是错误的,你不能return
empty
,答案应该是一个数字,而不是一个列表。您必须在此处 return 归零。 - 一旦找到匹配项,就停止了递归 - 但可能还有更多匹配项,您必须继续查找。
- 在
else
的情况下,您没有将两个结果加在一起,实际上,您丢弃了左子树的值,仅 return 右子树的值。
这应该可以解决所有问题:
(define (addTree sellerName tree)
(cond
[(empty? tree) 0]
[(string=? sellerName (seller-name (node-seller_info tree)))
(+ (seller-quantity_sold (node-seller_info tree))
(addTree sellerName (node-left_tree tree))
(addTree sellerName (node-right_tree tree)))]
[else
(+ (addTree sellerName (node-left_tree tree))
(addTree sellerName (node-right_tree tree)))]))
现在它按预期工作了:
(addTree "laura" treeSellers)
=> 18
(addTree "pedro" treeSellers)
=> 5
(addTree "ivan" treeSellers)
=> 0