取一个名称并将其添加到二叉树结构中

时间:2015-02-05 03:05:23

标签: scheme

这个树中的一个节点是三个项目的列表(名称左边),其中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))))

1 个答案:

答案 0 :(得分:0)

没有必要使用变异操作,一般在Scheme中我们避免它们,在这种情况下,特别容易(并且推荐)构建新树。而且,算数为何?这个问题与添加数字无关。另请注意,定义(insert name left right)没有多大意义,我们希望从树的节点开始插入; leftright作为参数并不有用。让我们从头开始。

(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)))))