打印BST格式化输出

时间:2014-07-23 03:47:38

标签: tree format binary-search-tree tree-traversal

我正在尝试打印二叉搜索树并获得以下输出:

-19-将4-将5-> 6-> 259->

如何调整导线功能,以便输出中不打印最后一个箭头?

我在main函数中使用了这段代码:

Tree x = new Tree(5);
x.add(6);
x.add(4);
x.add(259);
x.add(-19);
x.traverse(x);

Tree类如下:

public class Tree {
    Tree root;
    Tree left;
    Tree right;
    int value; 

public Tree(int value){
    this.value=value;
    this.left=null;
    this.right=null;
}

boolean add(int value){

    if (value == this.value)
        return false;
    else if (value <this.value) {
        if (left == null) {
            left = new Tree(value);
            return true;
        } else
            return left.add(value);
    } else if (value > this.value) {
        if (right == null) {
            right = new Tree(value);
            return true;
        } else
            return right.add(value);
    }
    return false;

}

void traverse(Tree root){

    if (root.left != null){
        traverse(root.left);
    }       

    System.out.printf("%d",root.value);
    System.out.printf("->");
    if (root.right != null){
        traverse(root.right);
    }
}
}

2 个答案:

答案 0 :(得分:0)

您希望避免仅为最后一个元素(即最大元素)打印->。所以,如果节点没有正确的子节点,并且导致它的所有节点都是&#34;右边&#34;那么你想不打印它。节点

void traverse(Tree root, boolean allRight){

    if (root.left != null){
        traverse(root.left, false);
    }       

    System.out.printf("%d",root.value);
    if(!allRight || root.right != null)
        System.out.printf("->");
    if (root.right != null){
        traverse(root.right, allRight);
    }
}

此外,您现在可以这样称呼它:x.traverse(x, true)

答案 1 :(得分:0)

这是另一个版本

public boolean traverse(TreeNode root){

    if (root.left != null){
        traverse(root.left);
        System.out.printf("->");

    }       

    System.out.printf("%d",root.value);

    if (root.right != null){
        System.out.printf("->");
        traverse(root.right);           
    }

    return true;
}