第五周介绍平衡查找树和BST的几何应用。
Week5
Balanced Search Tree
2-3 Tree
定义
2-3树也是一种数据结构,能够维护树的平衡。其内部节点(存在子节点的节点)要么有2个孩子和1个数据元素;要么有3个孩子和2个数据元素,叶子节点没有孩子,并且有1或2个数据元素。
在维基百科中具体定义如下:
如果一个内部节点拥有一个数据元素、两个子节点,则此节点为2节点;
如果一个内部节点拥有两个数据元素、三个子节点,则此节点为3节点;
当且仅当一下叙述中有一条成立时,T为2-3树:T为空。即T不包含任何节点;
T为拥有数据元素a的2节点。若T的左孩子为L,右孩子为R,则:L和R是等高的非空2-3树;
a大于L中的所有数据元素,同时,a小于等于R中的所有数据元素;T为拥有数据元素a和b的3节点,其中a<b。若T的左孩子为L、中间孩子为M、右孩子为R,则
L、M和R是等高的非空2-3树;
a大于L中的所有数据元素,并且小于等于M中的所有数据元素‘;同时
b大于M中的所有数据元素,并且小于等于R中的所有数据元素。
操作
-
2-3树的查找:
-
2-3树插入元素:
往一个2-node节点插入:将新的元素放到此2-node节点里,使其变为3-node节点即可。
往一个3-node节点插入:
只包含一个3-node节点:暂时将3-node变为一个4-node节点,将此4-node节点的中间元素提升,左边节点作为其左节点,右边元素节点作为其右节点。插入完成,树的高度由0变为1
节点是3-node,父节点是2-node:与第一种情况一样,将节点的中间元素提升到父节点的2-node节点中,使得父节点成为一个3-node节点,然后将左右节点分别挂在这个3-node节点的恰当位置
节点是3-node,父节点也是3-node:当节点拆分,中间元素提升至父节点,但此时父节点是一个3-node,插入后,父节点也要进行分裂,继续将中间元素提至父节点的父节点,一直重复此操作,直至遇到一个父节点是2-node节点,然后将其变为3-node,不需继续拆分。当根节点到字节点都是3-node的时候,在最后一步要进行根节点的分量,此时树的高度加1.