oo              ooo   o o oo o
 oooo         ooooo  o oo o   o oo   
o  o   o     o  o oooooooo o oooo
 o    o   o     o     o  oooo oo   o 有如上图所示的一个txt文件,由'空格'和'o'构成一幅抽象画,要求生成任意个树(左右和上下相连的‘o’为一个树)。给了如下几个函数,要求实现。但是我现在不知道这些函数都是干什莫用的.我现在把这个文件里的字符读到了一个数组中,假设这些函数都实现了,谁能告诉我怎末用这些函数生成树.头一次写树的算法,没有思路,请高手指点一二.
  //  This function creates a tree with a single node x   
  public void make_set(int x)
  {   }   // Traverse parent pointers from x up the tree until you find the root of the tree
  public int find_set(int x)
  {
  
   return 0;
  }   //  This function causes the root of one tree (containing x or y ) to point to    
  //  the root of the other tree                                                    
  public void union_sets(int x, int y)
  {
  
  }   // This function calculates and returns the total number of existing sets, and    
  // resets the lables of these sets to be integers started fron 1 to final_sets(). 
  public int final_sets()
  {
   return 0;
  }

解决方案 »

  1.   

    一点都不复杂,想清楚了保证有成就感.有一个txt文件,由空格和'o'组成,形成一个类似western的英文单词.要求生成n个树,节点就是上下,左右相邻的'o'.您想,只有上下,左右相邻不就是二叉树吗.那几个函数是给了的,我就是不知道咋用
      

  2.   

    LZ首先要把如何从0和空格的图转化为二叉树说清楚,否则是不好做的。
    按照你的说法,如果0为节点,叉是什么?上叉、下叉、左叉、右叉,那不是4叉树了吗?或者只分上下为一个叉,左右为一个叉。那对于某个0,它左边有0,右边有0,上面有0,下面有0怎么处理?如何来描述这种情况呢?
    那是不是文件中开头总有一个0,这就是数的根。然后向左和向下就分为两个叉了,而不存在右边和上边的问题,因为那已经是上一层了?如果是这样的话,那图的绘制不是随意的,因为随意绘制有可能出现某个孤立的节点,从数的根是没有叉能够访问过去的。
    所以还是先请LZ把图和数的转化规则讲清楚了再说!