繁体   English   中英

按顺序打印二进制搜索树

[英]Printing Binary Search Tree in-order Traversal

我创建了一个程序,该程序将来自用户输入的整数存储在二进制搜索树中,并且我具有递归函数,可以很好地执行前后遍历和按顺序遍历。 我想要做的是按顺序遍历树,并且在每个节点上我都想打印存储在其中的编号以及该节点左右两侧(如果该节点是叶节点)中的编号。 假设用户输入整数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 );

  }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM