だから私は基本的に関数 avl を持っていますか? その実行はO(n ^ 2)で行われます。これは、再帰するたびに、O(n)関数である高さを呼び出しているためです(nはツリー内のノードの数です)。
(define (height t)
(cond
[(empty? t) 0]
[else (+ 1 (max (height (BST-left t)) (height (BST-right t))))]))
(define (avl? t)
(cond
[(empty? t) #t]
[else (and (avl? (BST-left t))
(avl? (BST-right t))
(>= 1 (abs (- (height (BST-left t))
(height (BST-right t))))))]))
私の問題は、avlを作りたいということですか?O(n) 時間で実行します。「適用される BST のサイズに関係なく、高さ関数の呼び出しを一定時間内に制限するようにしてください。このようにして、全体で O(n) の実行時間を得ることができます。」というヒントが与えられました。... 一定時間で身長を伸ばす方法がわかりません。私のAVLを作るための提案はありますか?O(n^2) ではなく O(n) で実行しますか?