【问题标题】:How to store a binary search tree into a two-d array and print it out, in Java?如何在 Java 中将二叉搜索树存储到二维数组中并打印出来?
【发布时间】:2015-07-26 05:39:18
【问题描述】:

我已经创建了一个二叉搜索树,但是我不知道如何将它放入一个二维数组中(我对递归方式和非递归方式都感兴趣)并打印出来。

如下图

           7
         /   \
        5     9
       / \   / \
      4   6 8  15
      .
      .
      .

对不起,含糊不清的表达。基本上我试图 1)从文件中读取数字序列并为它们构建一个二叉搜索树。

2) 我需要将树绘制成字符数组(必须是二维数组)来表示绘图区域。所以树的根必须在数组的第一行中间,第一个左孩子必须在第二行一半的中间,第一个右孩子必须在另一个中间第二排的一半。等等。

如下图

------------34------------

-----24------------56-----

---9-----32-----41----57--

3)最后我需要打印出来(作为第一张图)。

我有 BinaryNode.class BinaryTree.class 在树类里面, root、left child 和 right child 有几种基本方法 getmethod 和 setmethod。

这是我在主类上的部分代码:

BinaryTree BinarySearchTree = new BinaryTree();

 FileReader theFile;

 BufferedReader inFile;

 String oneLine;

 try{

   theFile = new FileReader(args[0]);

   inFile = new BufferedReader(theFile);

   while((oneLine = inFile.readLine())!= null){

    String[] list = oneLine.split(",");

    for(int i=0; i<list.length; i++){                           

      BinaryNode TreeNode = new BinaryNode(list[i]);

      BinaryTree.insert(BinarySearchTree, TreeNode.element);

      }

      }

      }

      catch (Exception e) {

           System.out.println(e);

          }


    // building binary search tree

    public static BinaryTree insert(BinaryTree t, Object x){

      if(t.isEmpty())

      return new BinaryTree(x);

      else{

          if(((Integer)t.getRootobj()).intValue()<((Integer)x).intValue())

            t.setRight(insert(t.getRight(),x));

          else

            t.setLeft(insert(t.getLeft(),x));

            return t;

         }

【问题讨论】:

  • 我们可以看看你已经拥有的一些代码吗?
  • @halfer 确定。谢谢你提醒我

标签: java arrays binary-tree


【解决方案1】:

您可以将节点的值用作第一个数组中的索引,并将要存储的子项的值存储在第二个数组中。您可以将左孩子的值作为索引 0,将右孩子的值作为索引 1。要标记没有左孩子或右孩子,您可以使用负值或零。要知道初始根元素,您可以搜索具有至少一个元素的数组的第一个元素,或者您可以考虑将根元素存储在某处的方法。绝对不是最好的选择,但应该可以。

示例如下:

[0] -> {0,0}
[1] -> {2,3}
[2] -> {4,5}
[3] -> {6,7}
[4] -> {0,0}

【讨论】:

    【解决方案2】:

    由于二叉树是 Graph 数据结构的特殊示例,您可以检查现有的 Graph 表示,例如邻接表或邻接矩阵。

    这些链接可能会有所帮助:

    【讨论】:

      【解决方案3】:

      您可以将二叉树存储在一维数组中。

             1
           /   \
          2     3
         / \   / \
        4   5 6   7
      

      结果数组 A 为 A = [1, 2, 3, 4, 5, 6, 7]

      节点i的左孩子由2*i + 1给出,右孩子由2*i + 2给出,第一个节点索引为0。

      示例:第 3 个节点的左右子节点(索引:2) 左孩子:2*i + 1 = 2*2+1 = 5,A[5] = 6,正确! 右孩子:2*i + 2 = 2*2 + 2 = 6,A[6] = 7,也正确!

      因此,有了这个“算法”,您就可以构建一个 Java 类来秘密处理一维数组中的树!

      【讨论】:

      • 我需要把它放在一个二维数组中 >
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多