在Java中输出节点,左右子节点

时间:2014-10-15 12:28:43

标签: java binary-tree

我正在实现一个词典二叉树,我需要输出

 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

谢谢。

1 个答案:

答案 0 :(得分:2)

我认为你误解了这个任务:当你走完全构建的二叉树时,需要完成打印。由于您在构建树时尝试打印,因此在您需要时无法获得某些数据。特别是,您无法在第一行打印"banana""curtain",因为此时您拥有的只有"apple"

要解决此问题,请从println方法中删除所有insert2来电,执行

void printTree(BTNode node)

方法,并在树构造完成后调用它。 printTree实现很简单 - 你打印一个字符串,其中包含当前节点及其两个子节点的布局,然后遍历左子树,然后是右子树,如果有的话。