【发布时间】:2016-03-24 20:58:15
【问题描述】:
我会很感激这个练习。 练习 310. 按顺序设计函数。它消耗一棵二叉树并生成树中所有 ssn 编号的序列,因为它们在查看树图时从左到右显示。
我的解决方案只是将每个左节点与节点下方的内容反转,然后访问右节点。虽然顺序是正确的,但答案的格式不正确。这是我的代码:
(define-struct no-info [])
(define NONE (make-no-info))
(define-struct node [ssn name left right])
; A BinaryTree (short: BT) is one of:
; – NONE
; – (make-node Number Symbol BT BT)
(define nine9 (make-node 99 "nine9" NONE NONE))
(define one0 (make-node 10 "one0" NONE NONE))
(define two4 (make-node 24 "two4" NONE NONE))
(define one5 (make-node 15 "one5" one0 two4))
(define seven7 (make-node 77 "seven7" NONE NONE))
(define nine5 (make-node 95 "nine5" NONE nine9))
(define two9 (make-node 29 "two9" one5 one8))
(define eight9 (make-node 89 "eight9" seven7 nine5))
(define six3 (make-node 63 "six3" two9 eight9))
; BT -> list
; produce the sequence of ssn numbers from left to right
(define (inorder bt)
(cond
[(no-info? bt) '()]
[else (append (reverse (cons (node-ssn bt) (list (inorder (node-left bt)))))
(inorder (node-right bt)))]))
这是我运行(inorder six3)时的结果
(list (list (list () 10) 15 '() 24) 29) 63 (list '() 77) 89 '() 95 '() 99)
【问题讨论】:
标签: functional-programming racket