我创建了一个程序,用于在二叉搜索树中存储来自用户输入的整数,并且我有用于前,后和有序遍历的递归函数,它们工作正常。我想要做的是按顺序遍历树,在每个节点我想打印存储在那里的数字和节点左边和右边的数字,或者节点是否为叶子节点。 假设用户输入整数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 );
}
答案 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
,递归将负责按顺序打印左右树。