Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme 树方案的反向节点_Scheme_Racket - Fatal编程技术网

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奇怪。这几乎就像你没有使用我对
子项
之间的
的定义一样。到目前为止,你所有的问题似乎都是关于二进制搜索树的。你是在完成练习集、作业还是什么?