我创建了一个程序,将用户输入的整数存储在二叉搜索树中,并且我有用于预、后和中序遍历的递归函数,运行良好。我想做的是按顺序遍历树,并且在每个节点处我想打印存储在那里的数字以及其左侧和右侧节点中的数字,或者如果该节点是叶节点。 假设用户输入整数 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 );
}
最佳答案
很可能,您的递归会将您带到树的底层(您的叶子),并且当您尝试调用时
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 );
}
关于java - 打印二叉搜索树中序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22699798/