Functional programming 球拍平衡

Functional programming 球拍平衡,functional-programming,scheme,racket,Functional Programming,Scheme,Racket,我是Racket的初学者,最近我在Racket的树上工作,我不知道如何平衡BST,,,我写了一个插入和构建BST的代码,但不能平衡BST(我的插入和构建BST的代码) (定义(插入元素树) (cond((null?tree)(列表元素“()”()) ((=元素(汽车树))tre) ((

我是Racket的初学者,最近我在Racket的树上工作,我不知道如何平衡BST,,,我写了一个插入和构建BST的代码,但不能平衡BST(我的插入和构建BST的代码)

(定义(插入元素树)
(cond((null?tree)(列表元素“()”())
((=元素(汽车树))tre)
((<元素(汽车树))(列表(汽车树)(插入元素(汽车树))(汽车树)))
(其他(列表(car树)(cadr树)(插入元素(cadr树()()())))
(定义(构建BST L)
(生成BST帮助程序L'())
(定义(构建BST辅助对象L树)
(cond((null?L)树)
(else(构建BST辅助对象(cdr L)(插入(汽车L)树‘‘‘‘)’)

Thx预告:),,,对不起我的英语

你是在问如何在球拍中实现吗?这个问题可能还是太宽泛了,你可能需要尝试一下,看看你是否遇到了一个更具体的问题,你可以在这里免费发布(这里有很多聪明的计划/骗局程序员,我不是他们中的一员,但多年来我得到了很多人的帮助)我有一个BST(不平衡),我的问题是如何平衡树,,,我认为你要求的是清楚的,除了询问如何做之外,你在代码中演示的所有内容是,你已经准备好开始添加你可能收到的任何答案,这样的问题太广泛了。您是否尝试添加平衡功能但被绊倒?平衡是否有一些方面你不了解?我只是猜测你的具体问题是什么,但只有你才能缩小这个问题的范围。有几种不同的算法来保持二叉搜索树的平衡,每种算法都有自己的权衡。你查过了吗?您希望在Racket中实现哪些数据结构?最简单的可能是。保持每个节点的树高;插入左(右)分支时,如果该分支变得太深(比其他节点高出1个以上),请向右(左)旋转,即以相反方向旋转。这样,每个节点的高度差始终最多为1,并且树几乎是平衡的。事实上,太平衡了——红黑树需要更少的旋转,深度仍然是O(logn),这是我们在这里的目标(尽管代码更复杂)。
(define (insert element tree)
(cond ((null? tree)(list element '() '()))
    ((= element (car tree)) tre)
    ((< element (car tree))(list (car tree) (insert element (cadr tree)) (caddr tree)))
    (else (list (car tree) (cadr tree) (insert element (caddr tree))))))


(define (build-BST L)
   (build-BST-helper L '())) 
(define (build-BST-helper L tree)
 (cond ((null? L) tree)
 (else (build-BST-helper (cdr L) (insert (car L) tree)))))