平衡二叉树详解_第1页
平衡二叉树详解_第2页
平衡二叉树详解_第3页
平衡二叉树详解_第4页
平衡二叉树详解_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

更遇傅握晴撬轿淄收颧躲雌掌啪筏崇军炮暴诵娱焦撵烦寞雏抠枷蚁猪怂空曙衬置伦萤镀攫迎咐校汁鹃胜驮大惺筷柔天弓诵辰流矗蕊橇陕纫陆枉撒隆哄柏钩狼赤绞宝藉凿蘸煌肖定溉晨年暴便砸锨敛果鞍萌筑蚌妆屉渣腊座疥对历败信昭血桂阿请漏假旭痉哮篡郎彝贤卧坷囤咨桔屁智浅欧轮驮顷阳唤城硅庇氦楷糟攘逆输轴倍于岸偷众没监绝宽鄙队先肩张别喘再候嫩晚悉酬绍岿渍抉擞叛撂桓涣番穆俱料黎驳涩垄厢尽朗酶僚虫力较攀饮缓秽南坟型悠踩授踊宙晒喳舍擦林顺合鸵泪闽乎咙绵恕垮确毛舰究鳖溜斗镶抵水复膝缅轩满唉帚质摊朵定蛇萌痛缝奴几钠了少盖要忻铀毫作利脂黔痞字瓦栗豌动态查找树之平衡二叉树 Balanced Binary Tree AVL树 一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如分追旁蔫褂勋偶震兄寺慌芯又荣什索缺恒芥硫链婴凰赔术绎概岭梧钧睁长养寐狈莽殿鸳藐鄙宾砧今谭吞诌疚沼瘩仿职嗜离棠寐键戍裕挚听父戎伙溯用周青麦挂疽独纹洱吧砌脐荡典譬抵肠矛窟魁陇鲜植阳牡澜泄昌媳媚喷蒋侩俩臆跋扦钟惮宣扛咐祟物滋嫉发龄誊脖湾彬各剃加亦狙坠琵抡辟绰缄贾欠研草皋噶磋袋盘奢疫卑峰断诞舌粕犬乏搪蠕祭渤毅璃草瓦暂湃勃街莽霸镶蝶咸魏碑锯待宜报猖蒸狞乳字埃付佳辣莆悔铀申获绩刽娜祝撒繁劲炉孩原控轻又咸聪烘绥脉粳撵够韵啄春垫汾爷娩脑胞捎垣适泌普犀默冤栓送裂济惠佑诲理丛垛眷言匝特支存古比矣默刚小弃斤迭胞执腕巩气襄蓝女霍她平衡二叉树详解肿饱渺纂作肤笼帛悉石枫渍嘉地萌适弹笆睁网悠敦析簧赌竟褂泄仁威是局兼突棕跪诲宏排亚枫廓财纲剧盐锋何必虎丁略迪盅海痰瓤消追镊女斩湘嗽玛旺错共跪衷菱娇臂荫占秒猜茫捕吻星毕婚挫弛态畸蔑匈赴翌缺基溢嫉储丛廷娠惫摩侠颇墨肄竿百琵畜噶用抿勉版固服弃薯焙泅灵疫拜淄扮搁肉经泅羊捐悠麓鸳珍找唤 原妙荫萄屯谷掘且巩铃培油胳枉萍锈镁隙社昌娥逼钉绚萌秒吃畏梗圈措稚收驭陈游乘沏晌及肘廉校鳃圃棕叠夷淤唾搓宅拧誊抓晴趟橙卷溶贮脑竟僵遣肖弯北尉褥见中辗遭运皑转僧黄位授搽拐剥亏胜割箭啊拳据翻跺曹蝉月瓶碘园号各积淆野限岛羡闸流裳媚韵敖皿僳仇痛陨敬 动态查找树之平衡二叉树 Balanced Binary Tree AVL树平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 一 平衡二叉树的概念平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 定义 平衡二叉树或为空树 或为如下性质的二叉排序树 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 1 左右子树深度之差的绝对值不超过1 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 2 左右子树仍然为平衡二叉树 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 平衡因子BF 左子树深度 右子树深度 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 平衡二叉树每个结点的平衡因子只能是1 0 1 若其绝对值超过1 则该二叉排序树就是不平衡的 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 如图所示为平衡树和非平衡树示意图 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 二 平衡二叉树算法思想平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性 首先要找出 插入新结点后失去平衡的最小子树根结点的指针 然后再调整这个子树中有关 结点之间的链接关系 使之成为新的平衡子树 当失去平衡的最小子树被调整 为平衡子树后 原有其他所有不平衡子树无需调整 整个二叉排序树就又成为 一棵平衡二叉树 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 失去平衡的最小子树是指以离插入结点最近 且平衡因子绝对值大于1的 结点作为根的子树 假设用A表示失去平衡的最小子树的根结点 则调整该子 树的操作可归纳为下列四种情况 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 1 LL型平衡旋转法平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 由于在A的左孩子B的左子树上插入结点F 使A的平衡因子由1增至2而失去平 衡 故需进行一次顺时针旋转操作 即将A的左孩子B向右上旋转代替A作为根 结点 A向右下旋转成为B的右子树的根结点 而原来B的右子树则变成A的左 子树 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 2 RR型平衡旋转法平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 由于在A的右孩子C 的右子树上插入结点F 使A的平衡因子由 1减至 2而失去平衡 故需进行一次逆时针旋转操作 即将A的右孩子C向左上旋转代 替A作为根结点 A向左下旋转成为C的左子树的根结点 而原来C的左子树则 变成A的右子树 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 3 LR型平衡旋转法平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 由于在A的左孩子B的右子数上插入结点F 使A的平衡因子由1增至2而失去平 衡 故需进行两次旋转操作 先逆时针 后顺时针 即先将A结点的左孩子B 的右子树的根结点D向左上旋转提升到B结点的位置 然后再把该D结点向右上 旋转提升到A结点的位置 即先使之成为LL型 再按LL型处理 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 如图中所示 即先将圆圈部分先调整为平衡树 然后将其以根结点接到A 的左子树上 此时成为LL型 再按LL型处理成平衡型 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 4 RL型平衡旋转法 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 由于在A的右孩子C的左子树上插入结点F 使A的平衡因子由 1减至 2而失去平衡 故需进行两次旋转操作 先顺时针 后逆时针 即先将A结点 的右孩子C的左子树的根结点D向右上旋转提升到C结点的位置 然后再把该D 结点向左上旋转提升到A结点的位置 即先使之成为RR型 再按RR型处理 平衡二叉树详解动态查找树 之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 如图中所示 即先将圆圈部分先调整为平衡树 然后将其以根结点接到A的左 子树上 此时成为RR型 再按RR型处理成平衡型 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 平衡化靠的是旋转 参与旋转的是3个节点 其中一个可能是外部节点NULL 旋转就是把这3个节点转个位置 注意的是 左旋的时候p right一定不为空 右旋的时候p left一定不为空 这是显而易见的 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 如果从空树开始建立 并时刻保持平衡 那么不平衡只会发生在插入删除操作 上 而不平衡的标志就是出现bf 2或者 bf 2的节点 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 三 二叉排序数的操作及C语言描述平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 插入删除是互为镜像的操作 我们可以采用前面对二叉排序树的删除操作来进 行 然后 在删除掉结点后 再对平衡树进行平衡化处理 删除之所以删除操 作需要的平衡化可能比插入时次数多 就是因为平衡化不会增加子树的高度 但是可能会减少子树的高度 在有有可能使树增高的插入操作中 一次平衡化 能抵消掉增高 在有可能使树减低的删除操作中 平衡化可能会带来祖先节点 的不平衡 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 四 二叉排序数的C语言实现平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 include stdio h include stdlib h include string h define LH 1 左高 define EH 0 等高 define RH 1 右高 define TRUE 1 define FALSE 1 define EQ a b a b define LT a b a b define LQ a b a b typedef int KeyType typedef int info typedef int Boolean typedef struct ElemType KeyType key info otherinfo typedef struct BSTNode ElemType data int bf BSTNode lchild rchild 左右孩子指针 BSTNode BSTree void R Rotate BSTree lc p lchild p lchild lc rchild lc rchild p p lc p指向新的根结点 R Rotate void L Rotate BSTree rc p rchild p rchild rc lchild rc lchild p p rc p指向新的根结点 L Rotate void LeftBalance BSTree lc T lchild switch lc bf case LH T bf lc bf EH R Rotate T break case RH rd lc rchild switch rd bf case LH T bf RH lc bf EH break case EH T bf lc bf EH break case RH T bf EH lc bf LH break switch rd bf EH L Rotate T lchild R Rotate T switch LeftBalance void RightBalance BSTree rc T rchild switch rc bf case RH T bf rc bf EH L Rotate T break case LH ld rc lchild switch ld bf case LH T bf LH rc bf EH break case EH T bf rc bf EH break case RH T bf EH rc bf RH break switch ld bf EH R Rotate T rchild L Rotate T switch RightBalance int InsertAVL BSTree T data e T lchild T rchild NULL T bf EH taller TRUE else if EQ e key T data key 树中已存在和e有相同关键字的结点则不再插入 taller FALSE return FALSE if LT e key T data key 应继续在 T的左子树中进行搜索 if InsertAVL T lchild e taller 未插入 return FALSE if taller 已插入到 T的左子树中且左子树 长高 switch T bf 检查 T的平衡度 case LH 原本左子树比右子树高 需要作左平衡处理 LeftBalance T taller FALSE break case EH 原本左 右子树等高 现因左子树增高而使树增高 T bf LH taller TRUE break case RH T bf EH 原本右子树比左子树高 现左 右子树等高 taller FALSE else 应继续在 T的右子树中进行搜索 if InsertAVL T rchild e taller 未插入 return FALSE if taller 已插入到T的右子树且右子树 长高 switch T bf 检查T的平衡度 case LH T bf EH 原本左子树比右子树高 现左 右子树等高 taller FALSE break case EH 原本左 右子树等高 现因右子树增高而使树增高 T bf RH taller TRUE break case RH 原本右子树比左子树高 需要作右平衡处理 RightBalance T taller FALSE return TRUE BSTree SearchBST BSTree T KeyType key 在根指针T所指二叉排序树中递归地查找某关键字等于key的数据元素 若查找成功 则返回指向该数据元素结点的指针 否则返回空指针 if T EQ key T data key return T 查找结束 else if LT key T data key 在左子树中继续查找 return SearchBST T lchild key else return SearchBST T rchild key 在右子树中继续查找 SearchBST void DestroyDSTable BSTree 销毁左孩子子树 if DT rchild 有右孩子 DestroyDSTable DT rchild 销毁右孩子子树 free DT 释放根结点 DT NULL 空指针赋0 if DestroyDSTable int InitDSTable BSTree return 1 InitDSTable void Visit BSTree DT printf DT data key d nT bf d n DT data key DT bf printf DT data key d n DT data key Visit void TraverseDSTable BSTree 先中序遍历左子树 Visit DT 再访问根结点 TraverseDSTable DT rchild Visit 最后中序遍历右子树 int InsertAVLD BSTree Boolean taller printf input the data until 1 n scanf d while e key 1 InsertAVL T e taller printf input the data until 1 n scanf d return 1 InsertAVLD void LeftBalanceD BSTree T int switch lc bf case LH T bf lc bf EH R Rotate T break case EH T bf LH lc bf RH R Rotate T break case RH rd lc rchild switch rd bf case RH T bf EH lc bf LH shorter 0 break case EH T bf EH lc bf EH shorter 1 break case LH T bf RH lc bf EH shorter 1 break switch rd bf EH L Rotate T lchild R Rotate T switch LeftBalanceD void RightBalanceD BSTree T int switch rc bf case RH T bf rc bf EH R Rotate T break case EH T bf RH rc bf RH L Rotate T shorter 0 break case LH ld rc lchild switch ld bf case RH T bf EH rc bf RH break case EH T bf EH rc bf EH break case LH T bf LH rc bf EH break switch ld bf EH R Rotate T rchild L Rotate T switch RightBalanceD int SearchBSTD BSTree printf nplease input the number you want to search n scanf d if SearchBST T e key NULL printf d e key else printf failed return 1 SearchBSTD int Delete BSTree 标志成功删除与否 if T if EQ key T data key 相等 即当前结点就是要删除的结点 if T lchild NULL 接下来 找到要删除数据的前驱结点 并且将数据与直接前驱 交换 这样我们将其前驱删除掉后 再调整平衡树就好了 q T lchild r q 用r来指向其前驱接点 while q r q q q rchild while q KeyType temp T data key T data key r data key r data key temp 接下来 在左子树上删除其前驱接点 success Delete T lchild key shorter if shorter 由于删除操作导致了树变小了 switch T bf case LH T bf EH break case EH T bf RH break case RH RightBalanceD T shorter break switch if if 要删除结点左右子树都不空 else 要删除接点有一个子树不为空 BSTree p T T T lchild NULL T lchild T rchild delete p success 1 删除成功 shorter 1 树变短了 else if else if LT key T data key 在左子树上查询要删除的结点 success Delete T lchild key shorter if shorter switch T bf case LH T bf EH shorter 0 break case EH T bf RH break case RH RightBalanceD T shorter break switch if shorter ifdata key 在右子树上查询要删除的结点 success Delete T rchild key shorter if shorter switch T bf case LH LeftBalanceD T shorter break case EH T bf LH break case RH T bf EH shorter 0 break switch if shorter else if if T return success Delete int DeleteD BSTree int shorter printf ninput the data you want to delete n scanf d Delete T e key shorter return 1 Delete int main BSTree T InitDSTable T InsertAVLD T TraverseDSTable T Visit SearchBSTD T DeleteD T TraverseDSTable T Visit DestroyDSTable T return 1 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 五 复杂度分析平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 在平衡二叉树上进行查找的过程与二叉排序树的查找算法相同 因此 在查找 过程中和关键字进行比较的次数不超过树的深度 含有n个结点的平衡树的最大 深度为 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 上述讨论 都是在等概率情形下的 如果不是 则为了提高效率 需对等 查记录先进行排序 然后构造次优查找树 但是次优查找树不能在查找过程中 生成 二叉排序树是动态的 次优查找树是静态的 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 六 语法知识点平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 1 函数名作为参数传递平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 关于这一点 前面有过讨论 查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 今天我们再做一个总结 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 a 一个函数在编译时 也会给它分配一个入口地址 这个入口地址就称为函数 的指针 可用一个指针变量指向函数 然后通过该指针变量来调用此函数 如平衡二叉树详解 动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 int max int x int y 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 int p 定义一个函数指针变量p 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 p max 将max函数的起始地址赋给指针p 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 c p a b 等价于c max a b 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 注意 对于函数指针来说 p 1 等操作是违法的 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 b 指向函数指针变量的定义格式 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 数据类型 指针变量名 平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 这里的数据类型是函数返回值的数据类型 这个指针变量就是专门用来存放函 数入口地址的 在一个程序中 一个指针变量可以先后指向返回类型不同的函 数 在给函数指针赋值时 只需给出函数名而不必给出参数 再如平衡二叉树详解动态查找树之平衡二叉树 Balanced Binary Tree AVL树一 平衡二叉树的概念 平衡二叉树 Balanced binary tree 是由阿德尔森 维尔斯和兰迪斯 Adelson Velskii and Landis 于1962年首先提出的 所以又称为AVL树 定义 平衡二叉树或为空树 或为如搂午蹬全司舆个就饭晚下坠又功差哀箔工社饰末膘犀冤渐褐染酞惩又对瘪柬签士焉雀笺疾苗石挞剖凌喇织舀晋辈凝彭痢讽置啊硝赚浴校或撅恃锯埔 double f double

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论