如何直观地打印NON二叉树?

时间:2015-10-28 05:24:04

标签: java tree

我创建了一个基本树,其中所有节点都有一个名称和一组子节点。

<?php


$one=$_GET['number'];
if(empty($one)) {
    echo "Can't be blank";
    $a['result']='null';
    $a['error'] = 'No value!!';
} else {
    if(is_numeric($one)) {
        $show=$one*2;
        $arr = array(
        'show'=>$show
        );
        header('Content-Type:application/json');
        echo json_encode($arr);
        exit();
       // echo $show;
    } else {
        echo "NaN";
        $a['result']='null';
        $a['error']='nan';
    }



}
?>

并使用此课程

public class Tree {
    String data;
    Tree parent = null;
    HashSet children = new HashSet();

    public Tree(String nodeName) {
        this.data = nodeName;
    }

    public void parent(Tree parent) {
        this.parent = parent
    }

    public void addAChild(Tree child) {
        this.children.add(child);
        child.parent(this);
    }

这对我来说很有意义,但我想要树的直观表示,以便我可以快速测试,看看孩子和节点是否在正确的位置。

我正在尝试使输出看起来像这样:enter image description here

或类似的东西。

2 个答案:

答案 0 :(得分:5)

打印树的快速而肮脏的方法包括向Tree类添加这样的方法:

public void print(int level) {
    for (int i = 1; i < level; i++) {
        System.out.print("\t");
    }
    System.out.println(data);
    for (Tree child : children) {
        child.print(level + 1);
    }
}

level表示树中节点的级别,定义为1 + (the number of connections between the node and the root)。它决定了节点在输出中缩进的程度。

然后你可以通过打印根打印树(根的级别为1):

a.print(1);

获得这样的输出:

root
    n1
    n2
    n3
        n4
            n5

答案 1 :(得分:0)

此方法在python中有效,并且是递归的。基本上,它打印每个节点的名称,增加缩进量,然后在每个节点的每个子节点上调用该函数。您必须在for循环之前添加一个if语句,以确定您是否在分支的末尾,因此它不会再次调用该函数。

将其添加到树类。

 def display(self,indent=0):
    print( (' '*indent)+self.name)        
    for c in self.children:
      c.display(indent+1)