java - 打印具有多个子节点的数据 [Java]

标签 java recursion data-structures tree

向所有 Stackoverflowers 致敬!:D

这是我在 stackoverflow 上提出的第一个问题,感谢您对我接下来的问题提出的建议!

我想打印出树形数据结构中所有节点的数据。我已经有了一些代码,但我得到了奇怪的结果。

-每个节点可以有多个子节点,这些子节点存储在节点列表中
-我总是从根开始

这是我的代码:

    public static void printTree(Knoten blatt){      
    Aufgabe1.Gewichte = Aufgabe1.Gewichte + blatt.Gewicht;
    System.out.println(blatt.Gewicht);

    for(int i=0;i<blatt.children.size();i++) {
        blatt = blatt.children.get(i);
        printTree(blatt);
    } 
}

但是如果我调用这个函数,我的程序不会打印出所有节点。 我知道这一点,因为我在创建节点时打印数据,我得到这个:

3.0
27.0
-6.0
-7.0
10.0
-5.0
-47.0
-13.0
-5.0

如果我用递归函数将其打印出来,我会得到:

3.0
27.0
-6.0
-7.0
10.0
-5.0
-47.0
-13.0

-47 是父级,子级是 -13 和 -5,-5 只是不想被打印。

如果我手动打印出来,比如 root.children.children...get(i) 等等,我就可以使用正确的数据访问两个 child ... 我真的不知道我的代码中的错误在哪里,如果有人可以帮助我,那就太好了...... 我确信我只是有点盲目:D

我也尝试过其他一些树,有时这个错误不会出现,有时会......

树结构如下所示: enter image description here

感谢您的帮助,希望我的问题能够被理解

最佳答案

当您通过在循环中重新分配 blatt 来迭代子节点时,您正在更改当前节点变量 (= blatt)。这意味着在打印第一个子项后,您将继续查看子项的第二个子项(而不是第二个直接子项)。修复:

public static void printTree(Knoten blatt) {      
  Aufgabe1.Gewichte = Aufgabe1.Gewichte + blatt.Gewicht;
  System.out.println(blatt.Gewicht);

  for(int i = 0; i < blatt.children.size(); i++) {
    Knoten kind = blatt.children.get(i);  // Don't overwrite blatt here
    printTree(kind);
  } 
}

关于java - 打印具有多个子节点的数据 [Java],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43500891/

相关文章:

java - 双向链表中的递归方法

JavaFX 拖放交互对象

java - SendKeys 不会填充 Internet Explorer 中相应组件中的值,但在 Chrome 中却可以

java - 打印出最小找零算法中使用的面额时出现问题

javascript - 如何在 Yeoman 中使用 promises 进行递归提示?

java - 我在 SelectionSort 中得到错误的输出

java - Java 中的运算符优先级变得困惑

java - 如何找出哪个对象在 Java 中打开了文件?

java - 递归函数中的全局变量如何保持为零?

.net - 在 .NET 中实现 Trie 的明智方法是什么?