2017-04-18 31 views
6

我实现了一个实验性OOP语言,现在使用Storage benchmark对基准垃圾进行基准测试。现在我想检查/打印小深度的以下基准(n = 2,3,4,...)。打印具有4个节点(简单森林)的树用于检查基准

通过buildTreeDepth方法生成树(具有4个子节点的森林)。代码如下:

import java.util.Arrays; 

public final class StorageSimple { 

    private int count; 
    private int seed = 74755; 

    public int randomNext() { 
     seed = ((seed * 1309) + 13849) & 65535; 
     return seed; 
    } 

    private Object buildTreeDepth(final int depth) { 
     count++; 
     if (depth == 1) { 
      return new Object[randomNext() % 10 + 1]; 
     } else { 
      Object[] arr = new Object[4]; 
      Arrays.setAll(arr, v -> buildTreeDepth(depth - 1)); 
      return arr; 
     } 
    } 

    public Object benchmark() { 
     count = 0; 
     buildTreeDepth(7); 
     return count; 
    } 

    public boolean verifyResult(final Object result) { 
     return 5461 == (int) result; 
    } 


    public static void main(String[] args) { 
     StorageSimple store = new StorageSimple(); 
     System.out.println("Result: " + store.verifyResult(store.benchmark())); 
    } 
} 

是否有一些简单/直接的方式来打印由buildTreeDepth生成的树?只是n = 3,4,5的短树。

+0

PS:我想打印这棵树,这样我就可以确定它是我为我的实验性语言生成的同一棵树。 – mrsteve

+0

这个问题看起来过于宽泛。如果有100个Java API可以为您生成图形或ASCII树,我不会感到惊讶。可能的重复 - [如何绘制一棵树来表示连接节点的图形?](http://stackoverflow.com/questions/10126695/how-to-draw-a-tree-representing-a-graph-of-connected-节点) – Dukeling

+0

你可以添加一个你想要的输出结果的例子吗? – eitanfar

回答

1

正如其他人已经建议,你可以选择一些库来做到这一点。但是如果你只是想要一个简单的算法在命令行中测试,你可以做以下操作,在命令行中打印树时总是使用下面的代码(),可能会有一些bug。相信你可以得到这个BFS算法的作用):

queue.add(root); 
queue.add(empty); 
int count = 1; 
while (queue.size() != 1) { 
    Node poll = queue.poll(); 
    if (poll == empty) { 
     count = 1; 
     queue.add(empty); 
    } 
    for (Node n : poll.getChildNodes()) { 
     n.setNodeName(poll.getNodeName(), count++); 
     queue.add(n); 
    } 
    System.out.println(poll.getNodeName()); 
} 

输出示例:

1 
1-1 1-2 1-3 1-4 
1-1-1 1-1-2 1-1-3 1-2-1 1-2-2 1-3-1 1-3-2 1-4-1 
... 

而在你的情况下,你使用数组,这似乎更容易打印。

1

不使用对象数组,而是使用像ArrayList一样的List实现。对于一个改进的更好的结果子类ArrayList,它还可以保存一个'level'值并将缩进添加到toString()方法中。