我正在实现一个词典二叉树,我需要输出
curent node data ; left child data ; right child data
例如,如果我有这个输入:
banana apple curtain pumpkin egg
通过二叉树我需要输出:
banana ; apple ; curtain
apple ; -1 ; -1
curtain ; -1 ; pumpkin
pumpkin ; egg ; -1
egg ; -1 ; -1
" -1"如果左或右或左右两个孩子都为空,则输出。
我试图这样做:
public void insert(String newData){
root = insert2(newData, root);
}
public BTNode insert2(String s, BTNode n){
if(n == null){
return new BTNode(s);
}
if(s.compareTo(n.data) < 0){
n.left = insert2(s, n.left);
if(n.right!=null)
System.out.println(n.data+" "+n.left.data+" "+n.right.data);
else System.out.println(n.data+" "+n.left.data +" "+ -1);
}else if(s.compareTo(n.data) > 0){
n.right = insert2(s, n.right);
if(n.left!=null)
System.out.println(n.data+" "+n.left.data+" "+n.right.data);
else System.out.println(n.data+" "+ -1 +" "+n.right.data);
}
return n;
}
我的尝试输出是:
banana apple -1
banana apple curtain
curtain -1 pumpkin
banana apple curtain
pumpkin egg -1
curtain -1 pumpkin
banana apple curtain
谢谢。
答案 0 :(得分:2)
我认为你误解了这个任务:当你走完全构建的二叉树时,需要完成打印。由于您在构建树时尝试打印,因此在您需要时无法获得某些数据。特别是,您无法在第一行打印"banana"
或"curtain"
,因为此时您拥有的只有"apple"
。
要解决此问题,请从println
方法中删除所有insert2
来电,执行
void printTree(BTNode node)
方法,并在树构造完成后调用它。 printTree
实现很简单 - 你打印一个字符串,其中包含当前节点及其两个子节点的布局,然后遍历左子树,然后是右子树,如果有的话。