【发布时间】:2019-04-15 13:42:14
【问题描述】:
我实现了一个在二叉树中插入节点的函数。
树节点是(left-node key right-node) 形式的列表。(insert tree n) 是我的插入节点函数,其中树是二叉搜索树中的树节点列表,我想将键值 n 添加为新节点.
所以,(insert '(((() 4 ()) 5 (() 2 ())) 6 ()) 7) 将输出作为 (((() 4 ()) 5 (() 2 ())) 6 (() 7 ()))。
现在,我想做的是这样的:
1。定义一个值列表。
(define (f) (list '1 `2 `3 `4 `5 ))
2。循环遍历列表并在树中逐一输入值,从一棵空树开始。
所以,当我尝试执行第 2 步时,我执行了以下操作:
(define x ()) ;; Tree x is initially empty
(insert x 2) ;; This prints (() 2 ())
(insert x 1) ;; This prints (() 1 ()). I want it to be ((() 1 ()) 2 ()).
(insert x 3) ;; This prints (() 3 ()). I want it to be ((() 1 ()) 2 (() 3 ())).
这就是我卡住的地方。
我在下面提供了我的插入功能。
(define (left tree) (list-ref tree 0))
(define (value tree) (list-ref tree 1))
(define (right tree) (list-ref tree 2))
(define (insert tree n)
(cond
[( null? tree ) ( list () n () )]
[(< n (cadr tree)) (list (insert (car tree) n) (cadr tree) (caddr tree))]
[(> n (cadr tree)) (list (car tree) (cadr tree) (insert (caddr tree) n))]
[else tree]
)
)
有人可以建议我如何实现预期的输出吗?
【问题讨论】:
标签: scheme lisp binary-tree binary-search-tree