_ A _ - depth 1
_ B _C_ - depth 2
D E _F_ - depth 3
G H - depth 4
假设我有二叉树,我想添加新节点 - I,J,K,L,M,N,O。值没有排序/排序。添加节点可以是任何值。
添加I时,应将其添加到B下,以便深度3均衡。
_ A _ - depth 1
_ B_ _C_ - depth 2
D I E _F_ - depth 3
G H - depth 4
现在,由于深度3已满,J必须在D之下。 K也是。
_ A _ - depth 1
_ B_ _C_ - depth 2
_D_ I E _F_ - depth 3
J K G H - depth 4
当然,L,M,N必须以相同的方式插入。
_ A _ - depth 1
_ B_ _C_ - depth 2
_D_ _I_ _E_ _F_ - depth 3
J K L M N O G H - depth 4
换句话说,我试图在树中找到任何缺失点以添加节点,然后再继续下一个深度。
我正在寻找一种快速算法,可以完成这项工作或参考,很好地解释了这个算法。
嗯......这是一个可选的东西...但是如果这个算法可以用嵌套集模型来完成真的很棒,因为我正在应用它来存储整个树D b。我正在使用的语言是 PHP 。
注意:
抱歉,我故意跳过此要求澄清并专注于问题本身。
树可能不平衡的原因是,将添加一个没有未知父节点的节点来填充空白点(如示例),但知道其父节点的节点将直接添加到其父节点下(如果父节点)已经有两个节点,然后它将根据算法定位在低于父深度的某个位置。例如,
_ A _ - depth 1
_ B _C_ - depth 2
D E _F_ - depth 3
G H - depth 4
这里,假设节点X已经知道它的父H。然后,节点X将被添加到H下。不是问题。
_ A _ - depth 1
_ B _C_ - depth 2
D E _F_ - depth 3
G _H - depth 4
X
现在,添加了没有父节点的节点P.然后它应该看起来像这样
_ A _ - depth 1
_ B_ _C_ - depth 2
D P E _F_ - depth 3
G _H - depth 4
X
让我们说节点Z的父节点也是F但它已经满了。在这种情况下,必须应用算法,并且节点Z必须在节点G下以平衡节点F的子树。
_ A _ - depth 1
_ B_ _C_ - depth 2
D P E _F_ - depth 3
_G _H - depth 4
Z X - depth 5
节点知道其父节点是整棵树可能失衡的原因。
答案 0 :(得分:0)
考虑这种方法:
在每个节点上,保留两个值:
选择最大深度较小的方向。
递归。
BTW,这个例子有误导性,当双方几乎平衡时,你可能会从稳定的状态开始。