首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

很有难度:数组的树状结构输出算法,关键数组内有重复元素,输出的时候必须去掉同级的重复元素,该如何处理

2012-03-01 
很有难度:数组的树状结构输出算法,关键数组内有重复元素,输出的时候必须去掉同级的重复元素比如说数组1级

很有难度:数组的树状结构输出算法,关键数组内有重复元素,输出的时候必须去掉同级的重复元素
比如说
数组
  1级 2级 3级 4级
Arr { 1 , 2 , 5 , 8 }
Brr { 1 , 2 , 6 , 9 }
Crr { 1 , 3 , 5 , 10 }
Drr { 1 , 4 , 7 , 11 }
最终输出
  1级 2级 3级 4级
| - 1
|---| - 2
|---|---| - 5
|---|---|---| - 8
|---|---| - 6
|---|-------| - 9
|---|
|---| - 3
|---|---| - 5
|---|--- ---| - 10
|---|
|---| - 4
|-------| - 7
------------| - 11

其实就算不考虑树状结构的输出
我希望如果可以得到根节点跟子节点的对应关系也可以
比如说得到这样一个对应关系
s表示子节点
p表示根节点
如果能正确输出这样子结构也可以
[s:2,p:1]
[s:3,p:1]
[s:4,p:1]
[s:5,p:2]
[s:6,p:2]
[s:5,p:3]
[s:7,p:4]
[s:8,p:5]
[s:9,p:6]
[s:10,p:5]
[s:11,p:7]
就是输出相应的子节点跟父节点的对应关系
问题就是数组每一级如果有相同的元素,那么只保留一个
感觉相当难啊 困扰了好几天了


[解决办法]
这个就是trie树吧
[解决办法]
将数组转换成另外一种新式

#define TotalElement 11 //1~11总共有11个节点
typedef struct node
{
int father; //存放每个节点的父节点
struct node *pnext;
}NODE;

NODE* list[TotalElement + 1]; //list[index]表示标号为index的节点.list[0]不用.

void AddNode(int father,int child)
{
NODE *P;
for(p = list[child];p;p = p->pnext)
if(p->father == father)
break;
if(p)
return;
p = (NODE*)malloc(sizeof NODE);
p->father = father;
p->pnext = list[child];
list[child] = p; 
}

void main()
{
int i;
for(i = 1;i < 4;i++)
AddNode(Arr[i-1],Arr[i]);
for(i = 1;i < 4;i++)
AddNode(Brr[i-1],Brr[i]);
for(i = 1;i < 4;i++)
AddNode(Crr[i-1],Crr[i]);
for(i = 1;i < 4;i++)
AddNode(Drr[i-1],Drr[i]);
}
[解决办法]
这不是就是trie树么

楼主可以百度一下trie树一看就知道了。

trie树也称键树,专门用来解决前缀相同问题的

热点排行