DrRacket-更新二叉树中的值
我正在编写一个函数,它将生成一个新版本的二叉树DrRacket-更新二叉树中的值,racket,Racket,我正在编写一个函数,它将生成一个新版本的二叉树bt,其中每个节点的值都是奇数长度字符串,其值将替换为字符串“奇数”。 例如: (check-expect (odd-length (make-node 4 "four" (make-node 7 "seven" empty
bt
,其中每个节点的值都是奇数长度字符串,其值将替换为字符串“奇数”。
例如:
(check-expect (odd-length (make-node 4 "four"
(make-node 7 "seven"
empty
(make-node 2 "two" empty empty))
(make-node 32 "thirty-two" empty empty)))
(make-node 4 "four"
(make-node 7 "odd"
empty
(make-node 2 "odd" empty empty))
(make-node 32 "thirty-two" empty empty))
我已经成功地编写了一个转换单个值的函数,但我不知道如何使它适用于二叉树中的所有节点。有人能帮忙吗?非常感谢>我们可以简单地在树上定义一个
map
,并将change str
作为val
s的函数传递
(define (odd-length tree)
(tree-map identity change-str tree))
(define (change-str str)
(if (odd? (string-length str)) "odd" str))
(define (tree-map func-key func-val tree)
(cond [(empty? tree) tree]
[else (make-node (func-key (node-key tree))
(func-val (node-val tree))
(tree-map func-key func-val (node-left tree))
(tree-map func-key func-val (node-right tree)))]))
您需要在左侧和右侧递归调用它
(define (odd-length tree)
(tree-map identity change-str tree))
(define (change-str str)
(if (odd? (string-length str)) "odd" str))
(define (tree-map func-key func-val tree)
(cond [(empty? tree) tree]
[else (make-node (func-key (node-key tree))
(func-val (node-val tree))
(tree-map func-key func-val (node-left tree))
(tree-map func-key func-val (node-right tree)))]))