取一个名字并将其添加到二叉树结构中
Taking a name and adding it to a binary tree structure
这棵树中的一个节点是三个项目的列表(name left right),其中name是一个字符串,left和right是子树我觉得我已经偏离轨道有没有简单的方法用 (define(insert name left right))
写这个
(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))))
不需要使用变异操作,通常在 Scheme 中我们会避免它们,在这种情况下特别容易(并且推荐)在我们进行时构建一棵新树。而且,为什么要计数?这个问题与加法无关。还要注意定义 (insert name left right)
没有多大意义,我们想从树的根 node 开始插入一个 word; 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)))))
这棵树中的一个节点是三个项目的列表(name left right),其中name是一个字符串,left和right是子树我觉得我已经偏离轨道有没有简单的方法用 (define(insert name left right))
写这个(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))))
不需要使用变异操作,通常在 Scheme 中我们会避免它们,在这种情况下特别容易(并且推荐)在我们进行时构建一棵新树。而且,为什么要计数?这个问题与加法无关。还要注意定义 (insert name left right)
没有多大意义,我们想从树的根 node 开始插入一个 word; 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)))))