Scheme 初学者方案:将二进制搜索树转换为列表

Scheme 初学者方案:将二进制搜索树转换为列表,scheme,racket,Scheme,Racket,我在二进制搜索树和将它们转换为列表方面遇到了麻烦 (define-struct node (key val left right)) ;; A binary search tree (bst) is either ;; empty, or ;; a structure (make-node k v l r), where ;; k is a number (the key), ;; v is a string (the value), ;; l is a bst, where every key

我在二进制搜索树和将它们转换为列表方面遇到了麻烦

(define-struct node (key val left right))
;; A binary search tree (bst) is either
;; empty, or
;; a structure (make-node k v l r), where
;; k is a number (the key),
;; v is a string (the value),
;; l is a bst, where every key in l is less than k, and
;; r is a bst, where every key in r is greater than k.
有人能给我一些关于如何解决这个问题的提示吗

创建一个函数bst,该函数使用二进制搜索树并返回二进制搜索树节点的值字段中所有字符串的列表,该列表必须根据二进制搜索树中的键值按降序排列

;;Examples: (bst (make-node 4 "James" (make-node 2 "Kien" empty empty)
;;(make-node 5 "Jack" empty (make-node 11 "Cole" empty empty)))) => (list "Cole" "Jack" "James" "Kien")

谢谢

基本上,您必须使用反向(右子树/值/左子树)访问树中的所有节点,同时创建包含答案的列表。大致如下:

(define (tree->list tree)
  (if (empty? tree)
      empty
      (append (tree->list (node-right tree))
              (cons (node-val tree)
                    (tree->list (node-left tree))))))
它按预期工作:

(define bst
  (make-node 4 "James"
             (make-node 2 "Kien" empty empty)
             (make-node 5 "Jack" empty
                        (make-node 11 "Cole" empty empty))))

(tree->list bst)
=> (list "Cole" "Jack" "James" "Kien")

你有没有尝试过运用你老师所说的设计方法?你问的每一个问题似乎都是“我有这个问题…”的形式,但你没有展示你手上的设计配方所能完成的任何步骤。你知道设计课在课程中教授的主要内容是设计,而不是编码,对吗?请试一试!坦率地说,你所问的问题显示出你缺乏这一点。
(define (tree->list tree)
  (if(leaf? tree)
     (list (node tree))
     (cond((right-branch-only? tree)(append (list(node tree))
                                            (tree->list (right-branch tree))))
          ((left-branch-only? tree)(append (list(node tree))
                                           (tree->list (left-branch tree))))
          (else(append (list (node tree))
                       (append (tree->list (left-branch tree))
                               (tree->list (right-branch tree))))))))