繁体   English   中英

如何在Java中将二叉搜索树存储到二维数组中并打印出来?

[英]How to store a binary search tree into a two-d array and print it out, in Java?

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

如下图

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

抱歉表达模糊。 基本上,我试图1)从文件中读取数字序列,并为它们构建一个二进制搜索树。

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

如下图

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

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

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

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

我有BinaryNode.class BinaryTree.class,并且在树类中,对于根,左子级和右子级有几种基本方法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;

         }

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

这是示例:

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

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

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

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

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

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

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

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

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

暂无
暂无

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

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