【发布时间】:2018-09-07 18:05:28
【问题描述】:
我在使用 Racket 时遇到以下问题。
我正在尝试为通用树实现树前序、后序遍历。
结构体定义为:
(define-struct eempty [])
(define-struct branch [left value right])
我不能使用unless/when 运算符,只能使用if 和cond。
我实在想不出解决办法。我查看了维基百科的伪代码,但由于球拍编程范式,它并没有真正的帮助。
(define (inorder tree x)
(cond [(and (branch? tree) (branch? (branch-left tree))) (inorder (branch-left tree) x)]
[(and (branch? tree) (branch? (branch-right tree))) (inorder (branch-right tree) x)]
这是我到目前为止所做的,但是在匹配 empty 结构时会出现问题。
更新:
我要做的是按顺序或/和后序显示/打印节点值。
我知道我必须(以某种方式)实现另外 2 个条件:
(and (branch? tree) (empty? (branch-left tree))) do-something x)
(and (branch? tree) (empty? (branch-right tree))) do-something x)
在做某事时我必须做什么?我想我错过了这一点。
有什么帮助吗?
【问题讨论】:
-
您对树的数据定义是什么?树总是树枝吗?或者它可以是
one of一个空的还是一个分支? (我的意思是在How to Design Programs 的上下文中的数据定义,约翰克莱门茨的回答中提到的教科书。数据定义是设计配方的第一步。) -
一棵树是一个分支,它的左右值可以是一个分支,也可以是一个空。示例: (define tree (make-branch (make-branch (make-branch empty 2 empty) 4 (make-branch empty 5 empty)) 10 (make-branch (make-branch empty 12 empty) 15 (make-branch empty 18 空))))
标签: recursion tree racket traversal