我正在尝试打印二叉搜索树并获得以下输出:
-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);
}
}
}
答案 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;
}