2014-03-27 81 views
0

我已经创建了一个程序,它将二进制搜索树中用户输入的整数存储起来,并且具有可以正常工作的前置,后置和有序遍历的递归函数。我想要做的是按顺序遍历树,并且在每个节点上我想打印存储在那里的数字以及节点中左边和右边的数字,或者节点是叶节点。 假设用户进入整数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); 

    } 
+0

你的堆栈跟踪在哪里? – reto

+0

当您调用'inorderHelper(node.left)'和'inorderHelper(node.right)'时,您正在打印'node.left.data'和'node.right.data'。 – Kevin

回答

0

执行时,才应打印node.data,递归将打印左,右序树木的护理。

4

机会是,你的递归带你到你的树(你叶)的底层,当你尝试调用

node.left.data 

这是一个空=> NullPointerException异常。

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

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

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

    } 
+0

@ user3415930,这个答案对你有帮助吗?通常情况下,如果确实如此,您可以对它进行升级并给它一个复选标记,以便回答者获得一些积分。 –