平衡二叉树结点的插入

平衡二叉树是指左右子树的深度差不超过1的二叉树,通常用来优化二叉排序树。

平衡二叉树在构建过程和结点插入过程中遵守这样的法则:

1,如果想向某树的左子树的左子树插入结点导致失衡,那么如何平衡这棵树?

      首先,这样一棵树肯定符合下图:

     

(1)

N是新结点,插入N到1的左子树的左子树中导致失衡。 一个很显见的办法就是令结点2作为树根重新生成该树。

显然,1,3由于比2大,则1,3是2的右子树

4,N由于比2小,则4,N在2的左子树。但是这样一来,5怎么办? 5也很好办,5比2大但是比1小,于是5应该在2的右子树中,但是由于比1小,因此5插入到1的左子树里,正好1的左子树也空了(以前是2啊)。

(2)

2,如果是某棵子树的右子树的右子树呢?

(3)

这也好办,明显3变成树根,1,2比3都小,于是都在3的左子树,5,N比3都大,在3的右子树,问题还是一个,4怎么办?4比3小比1大,于是4在1的右子树,正好1的右子树也空着。

(4)

3,如果是树根的左子树的右子树呢?

(5)

如果依然让2做新根,那么1,3比2大,在右子树,4比2小,在左子树,那么5和n怎么办?5比2大比1小,挂在1的左子树可以,如果5再挂N,必然不平衡。

(6)

于是只能让5的树根作为新根,再看(5)图,由于1,3比5的树根大,于是作为5的新右子树,2,4比5的树根小,于是做5的新左子树。问题现在为:树根5原来的子树怎么办?

原来的左子树比5的树根小,但是比2大,因此作为2的右子树。原来的右子树比5的树根大但是比1小,作为1的左子树。新结点相应插在5的两个子树的对应位置。

(7)

最后一个:

右子树的左子树,跟上差不多,对应着来就行了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值