一个树的算法问题,作过的高手赐教
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;
}
------解决方案--------------------貌似算法逻辑比较复杂,希望楼主不吝笔墨说得清楚些。
------解决方案--------------------晕 这么复杂的题目?
------解决方案--------------------LZ首先要把如何从0和空格的图转化为二叉树说清楚,否则是不好做的。
按照你的说法,如果0为节点,叉是什么?上叉、下叉、左叉、右叉,那不是4叉树了吗?或者只分上下为一个叉,左右为一个叉。那对于某个0,它左边有0,右边有0,上面有0,下面有0怎么处理?如何来描述这种情况呢?
那是不是文件中开头总有一个0,这就是数的根。然后向左和向下就分为两个叉了,而不存在右边和上边的问题,因为那已经是上一层了?如果是这样的话,那图的绘制不是随意的,因为随意绘制有可能出现某个孤立的节点,从数的根是没有叉能够访问过去的。
所以还是先请LZ把图和数的转化规则讲清楚了再说!