将通用的二叉树加载到ArrayList中

时间:2018-10-26 17:29:54

标签: java arraylist tree binary

每个人的问题。

我必须遍历一棵二叉树,并以正确的顺序为每个节点填充一个数组,以便在打印数组的每个元素时都像树一样打印出来。我有正确的打印方法,并且有正确的方法来获取数组并创建二叉树。但是,我当前用于从二叉树填充数组的方法不是按照正确的顺序填充数组。

没有指定的遍历方法,但是我正在使用预排序,它必须是递归的并返回一个数组,并且由于我的二叉树是通用的,所以我使用的是ArrayList而不是数组。

我尝试用null填充ArrayList,以便可以将元素放置在指定的索引处,但是会出现越界错误。

这是我当前的代码:

public static <T> ArrayList<T> loadOverToArray(BinaryNode<T> root, int index){
    int length = findDepth(root);
    long size = powerOfTwo(length);
    ArrayList<T> temp = new ArrayList<>();
    /*for(int i = 0; i < size; i++){
        temp.add(null);
    }*/

    if(root != null){
        temp.add(root.getData());
    }
    if(root.getLeft() != null){
        temp.addAll(loadOverToArray(root.getLeft(), leftChildIndex(index)));
    }
    if(root.getRight() != null){
        temp.addAll(loadOverToArray(root.getRight(), rightChildIndex(index)));
    }

    return temp;
}

用于测试的树:

        8
            4
                2
                    1
                    3
                6
                    5
                    7
            12
                10
                    9
                    11
                14
                    13
                    15

然后我的方法返回给我的树:

        8
            4
                1
                    7
                    12
                3
                    10
                    9
            2
                6
                    11
                    14
                5
                    13
                    15

非常感谢!

0 个答案:

没有答案