【问题标题】:Printing Binary Search Tree in-order Traversal打印二叉搜索树中序遍历
【发布时间】:2014-05-07 03:29:38
【问题描述】:

我创建了一个程序,该程序将来自用户输入的整数存储在二叉搜索树中,并且我有用于前、后和中序遍历的递归函数,这些函数运行良好。我要做的是按顺序遍历树,并在每个节点上打印存储在那里的数字以及节点左右两侧的数字,或者该节点是否为叶节点。 假设用户输入整数 1、4、11 和 12,我希望我的输出如下所示:

1:右子树:12

4:右子树:11

11:叶节点

12:左子树:4 等等

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

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

//中序遍历的递归方法

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 );

  }

【问题讨论】:

  • 你的堆栈跟踪在哪里?
  • 当您调用inorderHelper(node.left)inorderHelper(node.right) 时,您正在打印node.left.datanode.right.data

标签: java recursion binary-search-tree treenode


【解决方案1】:

很有可能,您的递归会将您带到树的底层(您的叶子),并且当您尝试调用时

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 );

  }

【讨论】:

  • @user3415930,这个答案对你有帮助吗?通常情况下,如果是的话,你会投票给它并打勾,这样回答的人就会得到一些分数。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多