Scheme 树方案的反向节点
定义将树作为参数接收并返回的反向树方法 投资其所有分支机构: 我这样做:Scheme 树方案的反向节点,scheme,racket,Scheme,Racket,定义将树作为参数接收并返回的反向树方法 投资其所有分支机构: 我这样做: (define (reverse-tree t) (map (lambda (x) (if (list? x) (deep-reverse x) x)) (reverse t))) (define tree '(40 (28 (9) (32)) (70 (52) (102)))) (reverse-tree tree) 我退
(define (reverse-tree t)
(map (lambda (x)
(if (list? x)
(deep-reverse x)
x))
(reverse t)))
(define tree '(40 (28 (9) (32)) (70 (52) (102))))
(reverse-tree tree)
我退回了这个:
(((102) (52) 70) ((32) (9) 28) 40)
但我需要你返回反向的节点:
(40 (70 (102) (52)) (28 (32) (9)))
对于BST,我如何返回到反向节点?想象一下,您有针对树的过程<代码>(使树值左向右),
树值
,树左
,和树右
(define (reverse-tree tree)
(if (tree-null? tree)
tree-null
(make-tree (tree-value tree)
(reverse-tree (tree-right tree))
(reverse-tree (tree-left tree)))))
对于一棵可以有两个以上子树的树,我想你可以对每个子树应用自己的方法,并反转结果
(define (reverse-tree tree)
(if (tree-null? tree)
tree-null
(apply make-tree
(tree-value tree)
(map reverse-tree (reverse (tree-children tree))))))
;; heres the documentation of the tree
(define (make-tree value . children)
(cons value children))
(define tree-children cdr)
(define tree-value car)
(define tree-null? null?)
(define tree-null '())
假设一个节点有0个或2个分支,下面是一个简单的解决方案:
(define (reverse-tree tree)
(if (null? tree)
null
(let ((root (car tree)) (tree (cdr tree)))
(if (null? tree)
(list root)
(list root (reverse-tree (cadr tree)) (reverse-tree (car tree)))))))
测试
> (reverse-tree '(40 (28 (9) (32)) (70 (52) (102))))
'(40 (70 (102) (52)) (28 (32) (9)))
返回一个错误。第二个函数:make tree:需要2个参数,但只能找到1@user3672728奇怪。这几乎就像你没有使用我对
值和子项之间的
的定义一样。到目前为止,你所有的问题似乎都是关于二进制搜索树的。你是在完成练习集、作业还是什么?