1. 说明
我正在制作一个使用级别顺序插入的二叉搜索树。Level Order Insertion 的原因是因为我需要制作一个 完整的二叉搜索树。
2. 到目前为止我做了什么
我有ArrayList
这些数字:
5, 20, 25, 50, 66, 75, 80, 90, 92, 95, 111, 150, 166, 175, 200
我插入它们的方式是:
该insert
方法检查数字是高于还是低于root
. 较低表示在 的左侧root
,较高表示在 的右侧root
。
插入到90BST
的中间开始,并将其ArrayList
插入到Tree
. 这现在变成了root
。
接下来我要做的是将ArrayList
分成两部分,左半部分和右半部分ArrayList
:
5、20、25、50、66、75、80
92、95、111、150、166、175、200
接下来要做的是我把两半的中间插入到Tree
. 现在Tree
是 90 root
,左边是50,右边是 150。
这应该继续,直到没有更多的元素要插入。
3. 问题
我的问题是这是手动完成的,我希望我的方法本身将其ArrayList
分成两半,取两半的中间,将两半各分成两半,所以我们现在有四半,各取中间,将它们插入Tree
等等。
我试图在 a 中做到这一点for loop
,但我不知道如何处理它。
我不想手动执行的原因是它应该适用于任何ArrayList
尺寸,例如尺寸 3、尺寸 7、尺寸 15 等。
这显示了我希望它如何完成:
5, 20, 25, 50, 66, 75, 80, 90, 92, 95, 111, 150, 166, 175, 200 = 中间是 90
5, 20, 25, 50, 66, 75, 80 = 中间是 50
92, 95, 111, 150, 166, 175, 200 = 中间是 150
5, 20, 25 = 中间是 20
66, 75, 80 = 中间是 75
92, 95, 111 = 中间是 95
166, 175, 200 = 中间是 175
92, 111 = 中间是 92
166, 200 = 中间是 166
4. 代码
这是insert
检查值是否低于或高于 的方法root
。
private BinaryNode<AnyType> insert( AnyType x, BinaryNode<AnyType> t )
{
if( t == null )
return new BinaryNode<>( x, null, null);
int compareResult = x.compareTo( t.element );
if (compareResult < 0)
t.left = insert(x, t.left);
else if (compareResult > 0)
t.right = insert(x, t.right);
else
; // Duplicate; do nothing
return t;
}
素胚勾勒不出你
相关分类