【问题标题】:Print data of Nodes with multiple children [Java]打印具有多个子节点的数据 [Java]
【发布时间】:2017-09-15 23:42:32
【问题描述】:

大家好,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) 随便什么,我可以使用正确的数据访问两个孩子... 我真的不知道我的代码的错在哪里,如果有人可以帮助我,那就太好了...... 我确定我只是有点盲目:D

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

树结构如下所示:

感谢您的帮助,希望我的问题可以理解

【问题讨论】:

  • 哦,是的,我的格式有误,谢谢!
  • 你能把你测试的树结构也贴出来吗?由于打印所有内容的顺序,我怀疑您可能会对输出感到困惑。
  • 你是指树的数据,还是我的树数据结构?:D
  • 我正在尝试将您向我们展示的线性输出与树的实际结构相关联。否则,怎么会有人知道是否存在真正的问题?
  • 给你,希望对你有帮助

标签: java recursion data-structures tree


【解决方案1】:

通过在循环中重新分配 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);
  } 
}

【讨论】:

  • blatt 只是一个参考,所以将它重新分配给其他东西会改变它指向的基础数据吗?
  • @TimBiegeleisen 不,我不打算这么说(编辑文本以减少歧义)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多