打印二进制搜索树按顺序遍历

时间:2014-03-27 21:40:08

标签: java recursion binary-search-tree treenode

我创建了一个程序,用于在二叉搜索树中存储来自用户输入的整数,并且我有用于前,后和有序遍历的递归函数,它们工作正常。我想要做的是按顺序遍历树,在每个节点我想打印存储在那里的数字和节点左边和右边的数字,或者节点是否为叶子节点。 假设用户输入整数1,4,11和12,我希望我的输出看起来像:

1:右子树:12

4:右子树:11

11:Leaf节点

12:左子树:4 等等

这是我用于函数的代码,当我运行程序时,我得到一个空指针异常。

 public synchronized void inorderTraversal()
  { inorderHelper( root ); }

//执行inorder遍历的递归方法

private void inorderHelper( TreeNode node )
  {
      if ( node == null )
        return;

     inorderHelper( node.left );
     System.out.print( node.data + ":  Left Subtree " + node.left.data +": Right Subtree " + node.right.data);
     inorderHelper( node.right );

  }

2 个答案:

答案 0 :(得分:4)

有可能,你的递归将你带到树的最底层(你的树叶),当你试图打电话时

node.left.data

它是null =>的NullPointerException。

正如其他人所说,只要让你的递归来处理这项工作。

private void inorderHelper( TreeNode node )
  {
      if ( node == null )
        return;

     inorderHelper( node.left );
     System.out.print( "Node data: " + node.data);
     inorderHelper( node.right );

  }

答案 1 :(得分:0)

您应该只打印node.data,递归将负责按顺序打印左右树。