平衡二叉树构建过程之我的理解

平衡二叉查找树

构建方法

郭建勇 coolkissmile@gmail.com

定义

•平衡二叉树(全称平衡二叉查找树)

– 是一棵二叉树

–是一颗二叉查找树 (对于任意节点x, 其左子树的所有节点都小于x, x的右子树的节点都大

于等于x)

–是一颗平衡树, 平衡意思是对于任意节点, 其左子树高度和右子树高度相差不超过1, 左右

子树的高度差称为平衡因子 a, 也即 |a|

辨析

•平衡二叉树 vs 二叉查找树

二叉查找树也称作二叉排序树或者二叉搜索树平衡二叉树的本质特点是左右子树的平衡, 而二叉查找树是不要求平衡的

这也是为什么二叉搜索树在某些极端情况下搜索效率很低的原因: 高度太高, 接近线性效率

平衡二叉树就是为了尽量降低树的高度而提出来的.

插入

•平衡二叉树的查找逻辑比较简单, 这里不讲了

•构建平衡二叉树时的逻辑需要深刻理解•插入节点时如果左右子树平衡就不需要调整节点

•如果左右不平衡那么就需要调整节点

•由于不平衡没有一个统一的调整策略, 需要分情况看待, 左左, 右右, 左右, 右左.

出现不平衡--右右

100

110

. . .

105...

120...

new

右右不平衡:

首先定位最小不平衡二叉树, 以100为根节点的树

如果新插入节点 new 是在100的右孩子(110)的右子树分支(以120为根的子树) 就称为右右不平衡

110

. . .

105...

120...

new

思路:

把100的右子树高度降低1, 或者把100的左子树高度加1

如果能把110为根的树提高到100的位置, 那么右子树高度就降低了1

110

. . .

120...

105...

new

步骤1:

把110的左子树砍掉, 此时110没有右子树了, 如图黑色部分是被暂时挪走的部分

100110

120

. . .

...

105...

new

步骤1:

把100以及其左子树也砍掉, 并且把110为根的树拔高一个等级, 用110替代原来100的位置, 110成为树根

110

100120...

. . .

105...

new

步骤1:

把100为根的左子树部分对接到110的左子树位置, 因为之前的步骤里已经保证110的左子树是空的, 所以可以挪过来

110

100120...

105

. . .

...

new

步骤1:

把105的tree 对接到100的右子树位置, 因为100之前的右子树是110, 分离之后肯定是空的. 所以可以对接上去

右右 : 调整过程

110

100120...

105

. . .

...

new

完毕

至此, 右右调整已经结束, 如何证明调整后是平衡树呢110上提了一个节点, 所以120tree 的高度降低了1 , 100tree 降低了一个层次, 所以高度增加了1. 所以肯定是平衡的

如果某个子树是空的, 那么最多是调整没有得到降低或者增加, 但是由于不会是2个子树都是空的, 所以至少有一个增加了或者另外一个降低了, 所以仍然是平衡的

110

. . .

105...

120...

new

右左不平衡:

这种类型的不平衡就是最小不平衡二叉树的右子树的左子树部分插入形成的不平衡

110

. . .

105...

120...

new

思路:

解决右左不平衡的思路是: 先转化为 右右不平衡再用右右调整方法调整所以重点是: 右左--> 右右

110

. . .

105A

B

120...

new

右左--> 右右:

110

. . .

提升一个层次

105A

B

120...

new

右左--> 右右:

110

. . .

105A

B

120...

new

对接到合适位置

右左--> 右右:

105

. . .

A

110

B

120...

new

右左--> 右右:

把105的右子树砍掉, 也就是黄色的B-new 部分砍掉, 这样105就没有右子树了 把红色的105以及其左子树整体提升到100的右子树

105

. . .

A

110

120

B

...

new

右左--> 右右:

把绿色的110 整体对接到 105的右子树上,

105

. . .

A

110

B

120...

new

右左--> 右右:

把黄色的部分B-new 对接到合适的位置, 哪里合适呢? B 原来是105的右孩子, 所以B 肯定大于105,

105 原来是 110的左孩子, 所以 110>105>B, 也即 B肯定小于110, 而且110的左孩子原来是105, 切割之后110的左孩子肯定是空的, 所以B 的合适位置就是110的左孩子变换完毕

105

. . .

A

110

B

120...

new

右左--> 右右:

为什么这样变换后是把右左改变为右右不平衡了呢假设100的左子树高度是n

由于是不平衡, 100 的右子树高度肯定是 n+2

105

. . . A 110

B 120

...

new

右左--> 右右:

100.右. 左 高度是 n+2

100.右. 右 高度肯定是 n+1, 因为如果是

105

. . . A 110

B 120

...

new

右左--> 右右:

由于红色部分原来高度最大可能是N+2, 变换后提升了一个层次, 必然

105

. . . A 110

B 120

...

new

变换为 右右不平衡

至此已经把右左不平衡转换为了右右不平衡

左左不平衡: 是右右不平衡左右对称调换的解决方法

左右不平衡: 首先转变为左左不平衡 , 然后用左左解决方法

平衡二叉查找树

构建方法

郭建勇 coolkissmile@gmail.com

定义

•平衡二叉树(全称平衡二叉查找树)

– 是一棵二叉树

–是一颗二叉查找树 (对于任意节点x, 其左子树的所有节点都小于x, x的右子树的节点都大

于等于x)

–是一颗平衡树, 平衡意思是对于任意节点, 其左子树高度和右子树高度相差不超过1, 左右

子树的高度差称为平衡因子 a, 也即 |a|

辨析

•平衡二叉树 vs 二叉查找树

二叉查找树也称作二叉排序树或者二叉搜索树平衡二叉树的本质特点是左右子树的平衡, 而二叉查找树是不要求平衡的

这也是为什么二叉搜索树在某些极端情况下搜索效率很低的原因: 高度太高, 接近线性效率

平衡二叉树就是为了尽量降低树的高度而提出来的.

插入

•平衡二叉树的查找逻辑比较简单, 这里不讲了

•构建平衡二叉树时的逻辑需要深刻理解•插入节点时如果左右子树平衡就不需要调整节点

•如果左右不平衡那么就需要调整节点

•由于不平衡没有一个统一的调整策略, 需要分情况看待, 左左, 右右, 左右, 右左.

出现不平衡--右右

100

110

. . .

105...

120...

new

右右不平衡:

首先定位最小不平衡二叉树, 以100为根节点的树

如果新插入节点 new 是在100的右孩子(110)的右子树分支(以120为根的子树) 就称为右右不平衡

110

. . .

105...

120...

new

思路:

把100的右子树高度降低1, 或者把100的左子树高度加1

如果能把110为根的树提高到100的位置, 那么右子树高度就降低了1

110

. . .

120...

105...

new

步骤1:

把110的左子树砍掉, 此时110没有右子树了, 如图黑色部分是被暂时挪走的部分

100110

120

. . .

...

105...

new

步骤1:

把100以及其左子树也砍掉, 并且把110为根的树拔高一个等级, 用110替代原来100的位置, 110成为树根

110

100120...

. . .

105...

new

步骤1:

把100为根的左子树部分对接到110的左子树位置, 因为之前的步骤里已经保证110的左子树是空的, 所以可以挪过来

110

100120...

105

. . .

...

new

步骤1:

把105的tree 对接到100的右子树位置, 因为100之前的右子树是110, 分离之后肯定是空的. 所以可以对接上去

右右 : 调整过程

110

100120...

105

. . .

...

new

完毕

至此, 右右调整已经结束, 如何证明调整后是平衡树呢110上提了一个节点, 所以120tree 的高度降低了1 , 100tree 降低了一个层次, 所以高度增加了1. 所以肯定是平衡的

如果某个子树是空的, 那么最多是调整没有得到降低或者增加, 但是由于不会是2个子树都是空的, 所以至少有一个增加了或者另外一个降低了, 所以仍然是平衡的

110

. . .

105...

120...

new

右左不平衡:

这种类型的不平衡就是最小不平衡二叉树的右子树的左子树部分插入形成的不平衡

110

. . .

105...

120...

new

思路:

解决右左不平衡的思路是: 先转化为 右右不平衡再用右右调整方法调整所以重点是: 右左--> 右右

110

. . .

105A

B

120...

new

右左--> 右右:

110

. . .

提升一个层次

105A

B

120...

new

右左--> 右右:

110

. . .

105A

B

120...

new

对接到合适位置

右左--> 右右:

105

. . .

A

110

B

120...

new

右左--> 右右:

把105的右子树砍掉, 也就是黄色的B-new 部分砍掉, 这样105就没有右子树了 把红色的105以及其左子树整体提升到100的右子树

105

. . .

A

110

120

B

...

new

右左--> 右右:

把绿色的110 整体对接到 105的右子树上,

105

. . .

A

110

B

120...

new

右左--> 右右:

把黄色的部分B-new 对接到合适的位置, 哪里合适呢? B 原来是105的右孩子, 所以B 肯定大于105,

105 原来是 110的左孩子, 所以 110>105>B, 也即 B肯定小于110, 而且110的左孩子原来是105, 切割之后110的左孩子肯定是空的, 所以B 的合适位置就是110的左孩子变换完毕

105

. . .

A

110

B

120...

new

右左--> 右右:

为什么这样变换后是把右左改变为右右不平衡了呢假设100的左子树高度是n

由于是不平衡, 100 的右子树高度肯定是 n+2

105

. . . A 110

B 120

...

new

右左--> 右右:

100.右. 左 高度是 n+2

100.右. 右 高度肯定是 n+1, 因为如果是

105

. . . A 110

B 120

...

new

右左--> 右右:

由于红色部分原来高度最大可能是N+2, 变换后提升了一个层次, 必然

105

. . . A 110

B 120

...

new

变换为 右右不平衡

至此已经把右左不平衡转换为了右右不平衡

左左不平衡: 是右右不平衡左右对称调换的解决方法

左右不平衡: 首先转变为左左不平衡 , 然后用左左解决方法


相关文章

  • 学习实践科学发展观心得体会(一)
  • 贯彻落实科学发展观与构建社会主义和谐社会,是新世纪新阶段党中央提出的建设中国特色社会主义的重大战略思想,二者是内在统一的.我们应辩证理解二者的统一关系,无论是作为一种社会状态,还是一种价值目标,和谐社会建设都要靠落实科学发展观来实现. 科学发展观是实现社会和谐的基础 社会和谐是中国特色社会主义的本质 ...

  • 学习科学发展观心得体会:构建和谐社会
  • 贯彻落实科学发展观与构建社会主义和谐社会,是新世纪新阶段党中央提出的建设中国特色社会主义的重大战略思想,二者是内在统一的.我们应辩证理解二者的统一关系,无论是作为一种社会状态,还是一种价值目标,和谐社会建设都要靠落实科学发展观来实现. 科学发展观是实现社会和谐的基础 社会和谐是中国特色社会主义的本质 ...

  • 辖区警务社会管理创新的探讨
  • 维护城市的社会治安是公安机关的神圣职责.可以断言,每一个警察都会尽其所能做好辖区的警务工作,但做好辖区警务工作的前提是什么? 它就是一种意识.一种效能.一种精神.一种模式.首先,要有一种危机意识.要具有客观的.系统的治安危机感受,从而在警务工作中形成正确的治安防范思维,警务工作就能克服被动式的状况. ...

  • 西部农村基础教育调查报告
  • 在深化基础教育的今天,西部农村地区基础教育仍然是一个薄弱环节,就起存在的现状和矛盾,仍具迫切性和严重性.要推行全面的基础教育改革和取得中国教育事业的全面性胜利,西部农村地区的教育和弱势亟待提高和改善.那么,西部农村地区基础教育的现存状态和矛盾有哪些呢?如何结合实际,找到符合实际而科学的解决方案呢? ...

  • 高三物理教学总结
  • 本学期我执教6班物理课和五个班的物理综合课,一个学期转瞬即逝,为了以后能在工作中扬长避短,取得更好的成绩,现将本期工作总结如下: 一,认真组织好课堂教学,努力完成教学进度. 二,加强高考研讨,实现备考工作的科学性和实效性. 本学期,物理备课组的教研活动时间较灵活.备课组成员将在教材处理,教学内容的选 ...

  • 学习劳动合同法
  • 编者按:全国人大常委会第二十八次会议审议通过的《中华人民共和国劳动合同法》将于2008年1月1日起施行。这是自《劳动法》颁布实施以来,我国劳动和社会保障法制建设中的又一个里程碑。这部法律对于更好地保护劳动者合法权益,构建和发展***稳定的劳动关系,促进社会主义***社会建设,具有十分重要的意义。 为 ...

  • 走进新课程学习总结
  • 科技在发展,改革在深入,国际化的大都市呼唤一流的教育。作为学校教育和终身教育的奠基阶段的学前教育,也紧锣密鼓的拉开了课改的序幕。我们深知:要构建一流的学前教育,必须深入实施课程改革,以积极的姿态来迎接挑战,与改革同命运、共呼吸,把握机会,领会课程的精髓,提高教师的专业化水平。庄行幼儿园在二期课改新理 ...

  • 劳动合同法的解读
  • 解读本条是关于劳动合同法立法宗旨的规定。   立法宗旨也称立法目的。本条规定的立法宗旨有三层意思: 一、完善劳动合同制度,明确劳动合同双方当事人的权利和义务    劳动合同是市场经济体制下用人单位与劳动者进行双向选择,确定劳动关系,明确双方权利和义务的协议,是保护劳动者合法权益的基本依据。改革开放以 ...

  • 烟草干部学习胡总书记6.25讲话心得体会
  • 6月25日,胡锦涛总书记在中央党校省部级干部进修班发表重要讲话,着重强调:坚定不移走中国特色社会主义伟大道路,为夺取全面建设小康社会新胜利而奋斗.讲话明确回答了"举什么旗.走什么路"的根本问题 :鲜明提出了四个"坚定不移"的新要求:强调必须始终牢记社会主义初级 ...

  • 科学构建城乡统筹基层党建工作新格局
  • 优良的党风是凝聚党心民心的巨大力量,人民对切实端正党风寄予殷切期待.我想,"讲党性.重品行.作表率"是党着眼新形势.新任务,对党员干部的政治品格.思想境界.精神状态和工作作风提出的新要求,是推动党的事业发展和党的自身建设的重要保证.我们常说"一个党员就是一面旗帜&quo ...