编辑“︁
AA树
”︁(章节)
跳转到导航
跳转到搜索
脚本错误:没有“Mainspace editnotice”这个模块。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
任何侵權內容
將會刪除 | 百科內容須附有來源,以
供查證
| 維基百科內容均容許他人編輯、使用和重製 | 參閱
繁簡
和
地區詞處理
指引。
反垃圾检查。
不要
加入这个!
== 旋轉平衡 == 平衡一顆[[紅黑樹]]需要記錄其顏色,而AA樹是在每個節點記錄其"level"這相當於紅黑樹節點的黑高度 # 所有葉節點的level都是1 # 每個左孩子的level恰好為其父親的level減一 # 每個右孩子的level等於其父親的level或為其父親的level減一 # 每個右孫子的level嚴格小於其祖父節點的level # 每一個level大於1的節點有兩個子節點 兩個level相同的點之間的邊''水平邊'',也就是[[紅黑樹]]上的紅邊。往右的水平邊是允許的,但不可連續(紅黑樹性質);不能有向左的水平邊(AA樹性質)。因為AA樹的條件比紅黑樹嚴格,所以重新平衡一顆AA樹會比重新平衡一顆紅黑樹容易。 插入和刪除會讓AA樹變的不平衡(即違反它的性質)。恢復平衡只需兩種操作:"skew"和"split". Skew是一個右旋轉使得子樹中向左的水平邊變成向右的水平邊;Split是一個左旋並增加子樹根節點的level(請看範例)使得連續向右的水平邊消失。平衡插入和刪除操作的實現是由skew及split決定是否旋轉,而不是在主程式中判斷。 '''function''' skew '''is''' '''input:''' T, a node representing an AA tree that needs to be rebalanced. '''output:''' Another node representing the rebalanced AA tree. '''if''' nil(T) '''then''' '''return''' Nil '''else if''' nil(left(T)) '''then''' '''return''' T '''else if''' level(left(T)) == level(T) '''then''' ''Swap the pointers of horizontal left links.'' L = left(T) left(T) := right(L) right(L) := T '''return''' L '''else''' '''return''' T '''end if''' '''end function''' Skew: [[Image:AA Tree Skew2.svg]] '''function''' split '''is''' '''input:''' T, a node representing an AA tree that needs to be rebalanced. '''output:''' Another node representing the rebalanced AA tree. '''if''' nil(T) '''then''' '''return''' Nil '''else if''' nil(right(T)) '''or ''' nil(right(right(T))) '''then''' '''return''' T '''else if''' level(T) == level(right(right(T))) '''then''' ''We have two horizontal right links. Take the middle node, elevate it, and return it.'' R = right(T) right(T) := left(R) left(R) := T level(R) := level(R) + 1 '''return''' R '''else''' '''return''' T '''end if''' '''end function''' Split: [[Image:AA Tree Split2.svg]]
摘要:
请注意,所有对Local Chinese Wikipedia的贡献均可能会被其他贡献者编辑、修改或删除。如果您不希望您的文字作品被随意编辑,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源(详情请见
Project:著作权
)。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
导航菜单
个人工具
未登录
讨论
贡献
创建账号
登录
命名空间
页面
讨论
大陆简体
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
编辑
查看历史
更多
搜索
导航
首页
分类索引
特色内容
新闻动态
随机页面
联络我们
关于
资助维基百科
interaction
帮助
社群首页
introduction
互助客栈
IRC即时聊天
最近更改
特殊页面
工具
链入页面
相关更改
特殊页面
页面信息