日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

高度平衡树 -- AVL 树

發(fā)布時(shí)間:2025/3/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高度平衡树 -- AVL 树 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Scheme 的表達(dá), 優(yōu)雅.


#lang scheme


( define nil '() )
( define ( root tree )( car tree ) )
( define ( left-tree tree )( cadr tree ) )
( define ( right-tree tree )( caddr tree ) )
( define ( height tree )
? ?( cond [ ( null? tree ) 0 ]
? ? ? ? ? [ else ( cadddr tree ) ] ) )


( define ( make-leaf elem )( list elem nil nil 1 ) )


( define ( make-avl-tree root left right )
? ?( list root left right ( + 1 ( max ( height left )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( height right ) ) ) ) )

( define ( contains-elem?

elem tree )
? ?( cond [ ( null? tree ) false ]
? ? ? ? ? [ ( = elem ( root tree ) ) true ]
? ? ? ? ? [ ( < elem ( root tree ) )
? ? ? ? ? ? ( contains-elem?

elem ( left-tree tree ) ) ]
? ? ? ? ? [ ( > elem ( root tree ) )
? ? ? ? ? ? ( contains-elem? elem ( right-tree tree ) ) ] ) )

( define ( rotate-left-left tree )
? ?( cond [ ( null? tree ) tree ]
? ? ? ? ? [ else ( make-avl-tree ( root ( left-tree tree ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree ( left-tree tree ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree ( left-tree tree ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree tree ) ) ?) ] ) )

( define ( rotate-right-right tree )
? ?( cond [ ( null? tree ) tree ]
? ? ? ? ? [ else ( make-avl-tree ( root ( right-tree tree ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree ( right-tree tree ) ) )?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree ( right-tree tree ) ) ) ] ) )

( define ( rotate-right-left tree )
? ?( cond [ ( null?

tree ) tree ]
? ? ? ? ? [ else ( make-avl-tree ( left-tree ( right-tree tree ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree ( left-tree ( right-tree tree ) ) ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( make-avl-tree ( root ( right-tree tree ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree ( left-tree ( right-tree tree ) ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree ( right-tree tree ) ) ) ) ] ) )

( define ( rotate-left-right tree )
? ?( cond [ ( null?

tree ) tree ]
? ? ? ? ? [ else ( make-avl-tree ( root ( right-tree ( left-tree tree ) ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( make-avl-tree ( root ( left-tree tree ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree ( left-tree tree ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree ( right-tree ( left-tree tree ) ) ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree ( right-tree ( left-tree tree ) ) )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree tree ) ) ) ] ) )

( define ( balance-avl-tree tree )
? ?( define ( factor tree )
? ? ? ( - ( height ( right-tree tree ) )
? ? ? ? ? ( height ( left-tree tree ) ) ) )
? ?( let ( [ f ( factor tree ) ] )
? ? ? ( cond [ ( = f 2 )
? ? ? ? ? ? ? ?( cond [ ( < ( factor ( right-tree tree ) ) 0 )
? ? ? ? ? ? ? ? ? ? ? ? ( rotate-right-left tree ) ]
? ? ? ? ? ? ? ? ? ? ? [ else ( rotate-right-right tree ) ] ) ]
? ? ? ? ? ? ?[ ( = f -2 )
? ? ? ? ? ? ? ?( cond [ ( > ( factor ( left-tree tree ) ) 0 )
? ? ? ? ? ? ? ? ? ? ? ? ( rotate-left-right tree ) ]
? ? ? ? ? ? ? ? ? ? ? [ else ( rotate-left-left tree ) ] ) ]
? ? ? ? ? ? ?[ else tree ] ) ) )

( define ( insert-elem elem tree )
? ?( define ( insert-in-son elem tree )
? ? ? ( cond [ ( null? tree )
? ? ? ? ? ? ? ?( make-leaf elem ) ]
? ? ? ? ? ? ?[ ( < elem ( root tree ) )
? ? ? ? ? ? ? ?( let* ( [ newLeftTree ( insert-in-son elem ( left-tree tree ) ) ]
? ? ? ? ? ? ? ? ? ? ? ? [ newAVLTree ( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?newLeftTree
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree tree ) ) ] )
? ? ? ? ? ? ? ? ? ( balance-avl-tree newAVLTree ) ) ]
? ? ? ? ? ? ?[ ( > elem ( root tree ) )
? ? ? ? ? ? ? ?( let* ( [ newRightTree ( insert-in-son elem ( right-tree tree ) ) ]
? ? ? ? ? ? ? ? ? ? ? ? [ newAVLTree ( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?newRightTree ) ] )
? ? ? ? ? ? ? ? ? ( balance-avl-tree newAVLTree ) ) ]
? ? ? ? ? ? ?[ else tree ] ) )
? ?( cond [ ( contains-elem? elem tree ) tree ]
? ? ? ? ? [ else ( insert-in-son elem tree ) ] ) )

( define ( delete-elem elem tree )
? ?( define ( delete-left-most tree )
? ? ? ( cond [ ( left-empty? tree ) tree ]
? ? ? ? ? ? ?[ else ( let* ( [ leftMost ( delete-left-most ( left-tree tree ) ) ]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[ newRightTree ( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( right-tree leftMost )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( right-tree tree ) ) ] )
? ? ? ? ? ? ? ? ? ? ? ?( make-avl-tree ( root leftMost )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?nil
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( balance-avl-tree newRightTree ) ) ) ] ) )
? ?( define ( delete-in-son elem tree )
? ? ? ( cond [ ( < elem ( root tree ) )
? ? ? ? ? ? ? ?( let* ( [ newLeftTree ( delete-in-son elem ( left-tree tree ) ) ]
? ? ? ? ? ? ? ? ? ? ? ? [ newAVLTree ( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?newLeftTree
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( right-tree tree ) ) ] )
? ? ? ? ? ? ? ? ? ( balance-avl-tree newAVLTree ) ) ]
? ? ? ? ? ? ?[ ( > elem ( root tree ) )
? ? ? ? ? ? ? ?( let* ( [ newRightTree ( delete-in-son elem ( right-tree tree ) ) ]
? ? ? ? ? ? ? ? ? ? ? ? [ newAVLTree ( make-avl-tree ( root tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( left-tree tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?newRightTree ) ] )
? ? ? ? ? ? ? ? ? ( balance-avl-tree newAVLTree ) ) ]
? ? ? ? ? ? ?[ ( = elem ( root tree ) )
? ? ? ? ? ? ? ?( cond [ ( and ( right-empty? tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( left-empty? tree ) )
? ? ? ? ? ? ? ? ? ? ? ? nil ]
? ? ? ? ? ? ? ? ? ? ? [ ( right-empty? tree )
? ? ? ? ? ? ? ? ? ? ? ? ( left-tree tree ) ]
? ? ? ? ? ? ? ? ? ? ? [ ( left-empty? tree )
? ? ? ? ? ? ? ? ? ? ? ? ( right-tree tree ) ]
? ? ? ? ? ? ? ? ? ? ? [ else ( let ( [ leftMost ( delete-left-most ( right-tree tree ) ) ] )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( make-avl-tree ( root leftMost )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( left-tree tree )
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( right-tree leftMost ) ) ) ] ) ] ) )
? ?( define ( left-empty? tree )( null?

( left-tree tree ) ) )
? ?( define ( right-empty? tree )( null?

( right-tree tree ) ) )
? ?( cond [ ( contains-elem?

elem tree )
? ? ? ? ? ? ( delete-in-son elem tree ) ]
? ? ? ? ? [ else tree ] ) )

( define ( list->avl elems )
? ?( define ( iter elems tree )
? ? ? ( cond [ ( null?

elems ) tree ]
? ? ? ? ? ? ?[ else ( iter ( cdr elems )?
? ? ? ? ? ? ? ? ? ? ? ? ? ?( insert-elem ( car elems ) tree ) ) ] ) )
? ?( cond [ ( null? elems ) '() ]
? ? ? ? ? [ else ( let( [ avl ( make-leaf ( car elems ) ) ] )

? ? ? ? ? ? ? ? ? ? ( iter ( cdr elems ) avl ) ) ] ) )





總結(jié)

以上是生活随笔為你收集整理的高度平衡树 -- AVL 树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。