Java k-数组树生成邻接矩阵

Java k-数组树生成邻接矩阵,java,tree,Java,Tree,嗨,我正在尝试用Java实现输出为邻接矩阵形式的k-数组树。给出了输入参数 k=每个节点的子节点数和 d=树的深度(高度) 给定这些参数,我必须生成k数组树的相邻矩阵(写在文件中)。你能指导我实施这个吗 我已经看了下面的链接,但我无法跟上,因为我是Java初学者。你能不能有人带我去 我有一个a的实现(它非常类似于您链接到的我的n元树实现)。它还不完整,但它应该给你足够的开始 要生成邻接矩阵,您需要一个维度为nxk的二维数组。然后必须遍历树并填充邻接矩阵。一行i将对应于节点i,而矩阵[i][0]

嗨,我正在尝试用Java实现输出为邻接矩阵形式的k-数组树。给出了输入参数 k=每个节点的子节点数和 d=树的深度(高度)

给定这些参数,我必须生成k数组树的相邻矩阵(写在文件中)。你能指导我实施这个吗

我已经看了下面的链接,但我无法跟上,因为我是Java初学者。你能不能有人带我去


我有一个a的实现(它非常类似于您链接到的我的n元树实现)。它还不完整,但它应该给你足够的开始


要生成邻接矩阵,您需要一个维度为
nxk
的二维数组。然后必须遍历树并填充邻接矩阵。一行
i
将对应于节点
i
,而
矩阵[i][0]
矩阵[i][k-1]
将包含对节点
i
k
子节点的引用。当然,邻接矩阵中节点的顺序取决于您的遍历方法。

根据@VivinPaliath提供的代码,我添加了一个简单(脏)脚本,可以生成邻接矩阵,其中k控制子节点的数量,d控制树的深度。KAryTreeNode的类型设置为Integer,因为它存储节点的索引

输出被打印到控制台。需要将类AbstractNodeAbstractTreeKAryTreeKAryTreeNodeNodeTreeTreeTraversalOrder添加到项目中。这些类可以在@VivinPaliath的Github存储库中找到

public class KAryTreeGenerator {

    public static Integer index = 0;

    public static void populate(KAryTreeNode<Integer> node, int height, int k) {
        if (height == 0) {
            // nothing more to do
        } else {

            for (int i = 0; i < k; i++) {
                node.addChild(new KAryTreeNode<>(k, index));
                index = index + 1;
            }

            for (int i = 0; i < k; i++) {
                populate(node.getChildAt(i), height - 1, k);
            }
        }
    }

    public static void main(String[] args) {

        int k = 3; // number of children
        int d = 3; // depth

        KAryTreeNode<Integer> root = new KAryTreeNode<>(k, index);
        index = index + 1;

        KAryTree<Integer> tree = new KAryTree<>(k, root);

        d = d - 1;
        populate(tree.root, d, k);

        int size = (int)((Math.pow((double)k, (double)(d+1) ) - 1)/(k - 1));

        int[][] adjacencyMatrix = new int[size][size];

        List<KAryTreeNode<Integer>> queue = new LinkedList<>();

        queue.add(root);

        while(!queue.isEmpty()) {

            KAryTreeNode<Integer> parent = queue.remove(0);

            List<KAryTreeNode<Integer>> children = parent.getChildren();

            for(KAryTreeNode<Integer> child: children) {
                // adjacencyMatrix[child.data][parent.data] = -1; //shows the parent in the matrix
                adjacencyMatrix[parent.data][child.data] = 1;
            }
            queue.addAll(children);
        }

        for (int i = 0; i < adjacencyMatrix.length; i++) {
            StringBuilder builder = new StringBuilder();
            builder.append(Arrays.toString(adjacencyMatrix[i]));
            builder.deleteCharAt(0);
            builder.deleteCharAt(builder.toString().length()-1);
            System.out.println(builder.toString());
        }
    }
}
公共类KAryTreeGenerator{
公共静态整数索引=0;
公共静态空白填充(KAryTreeNode节点,整数高度,整数k){
如果(高度==0){
//无事可做
}否则{
for(int i=0;i
我的研究工作需要这个实现,这不是我的任务。提前谢谢。非常感谢你的回答。我是初学者,所以您可以指导我从哪里开始,因为我没有看到任何“staticvoidmain()”。我应该在哪里给出输入值,比如K和d?@Nesh这个问题恐怕太宽泛了。您必须导入这个库,或者只是复制所需的类。您将从
main()
实例化此类的对象。这真的取决于你的实施。非常感谢你的回复。我可以请你给我一个如何使用它的例子吗?然后我可以从这里开始。像这样的事情,他举了一个例子,所以我能更好地理解。你能做点像这样的吗。