我实现了一个在二叉树中插入节点的函数。
树节点是一个列表形式(left-node key right-node)。
(insert tree n)是我的插入节点函数,其中 tree 是二叉搜索树中的树节点列表,我想将键值 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]
)
)
有人可以建议我如何实现我的预期输出吗?