gpt4 book ai didi

Java-为什么我的递归 Draw tree 方法输出不正确

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:17 25 4
gpt4 key购买 nike

我使用数组实现了一个堆,我试图从数组中的元素中绘制一棵树。这是我的方法。

public void DrawTree(Job[] a,int index,int pre_space){
for (int i=0;i<pre_space;i++)
System.out.print(" ");

System.out.print(a[index].getName()+":"+index );

if (2*index<=element_count&&2*index+1<=element_count){ //if it has both children
System.out.println();

for (int i=0;i<pre_space;i++)
System.out.print(" ");

System.out.print("/");
System.out.println("\\");

DrawTree(a,2*index,pre_space-8);
DrawTree(a,2*index+1,3);

}

else if (2*index<=element_count){ //if it only has a left child

System.out.println();

for (int i=0;i<pre_space;i++)
System.out.print(" ");

System.out.println("/");
DrawTree(a,2*index,pre_space-3);

}


}

为了便于理解,我也输出了索引。这是我得到的输出:

          whateve:1
/\
Robin:2
/
Roudy:4 Romy:3

Romy 应该与 Robin 在同一行,据我了解,当我为右子 (Romy) 调用 DrawTree 方法时,它将回溯到适当的行。

最佳答案

如评论中所述,您使用的方案是预序遍历,例如,如果我们有一棵树:

              1
/ \
2 3
/ \
4 5

当你遍历到节点 2 时,你会输出一些额外的行,然后才能转到节点 3。

顺序是 1 -> 输出一些行 ->2 -> 输出一些行 -> 4 -> 5 ->3,所以在节点 3,我们现在在节点 1 和 3 之间至少有 2 行。

所以你应该做的是使用 ArrayList<ArrayList<String>> lines , 每个元素 ArrayList<String>lines代表一条线。

注意:这个问题比您当前的实现复杂得多,因为在树的每个级别之间,我们需要提供足够的空间显示其所有后继者。所以你需要在打印出来之前预先计算出必要的空间(取决于每个节点的子树的大小)。

关于Java-为什么我的递归 Draw tree 方法输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com