这个树中的一个节点是三个项目的列表(名称左边),其中name是一个字符串,左边和右边是子树,我觉得我已经偏离轨道有一个简单的方法来写这个只用(定义(插入名称左右))
(define tree
(lambda (node word)
(cond
((null? node) (make-tree word))
((string=? word (tree-word node))
(set-tree-count! node (+ (tree-count node) 1))
node)
((string<? word (tree-word node))
(set-tree-left! node (tree (tree-left node) word))
node)
(else
(set-tree-right! node (tree (tree-right node) word))
node))))
答案 0 :(得分:0)
没有必要使用变异操作,一般在Scheme中我们避免它们,在这种情况下,特别容易(并且推荐)构建新树。而且,算数为何?这个问题与添加数字无关。另请注意,定义(insert name left right)
没有多大意义,我们希望从树的节点开始插入字; left
和right
作为参数并不有用。让我们从头开始。
(define (insert node word)
(cond ((null? node) (make-tree word '() '()))
((string=? word (tree-word node)) node)
((string>=? word (tree-word node))
(make-tree (tree-word node)
(tree-left node)
(insert (tree-right node) word)))
(else
(make-tree (tree-word node)
(insert (tree-left node) word)
(tree-right node)))))