高分求助啊,算法啊,这种结构如何排序呢?
原结构:
假设根节点为ROOT
其树结构为
ROOT
WA
WAA
WAB
WB
WBA
H
HA
HAA
HAB
HAC
HB
HC
HD
H8
L
LA
LB
LC
LD
W7
目标结构为:
ROOT
WA
L
LA
LD
LB
LC
WAA
WAB
WB
W7
WBA
H
HA
HD
HAC
HAA
HAB
HB
H8
HC
原则是 读取目标节点的3个子节点,如果目标节点的子节点多余3个,则将该节点移到下一层节点
------解决方案--------------------有些困難哦,期待有高手相助~!
------解决方案--------------------只能期待了。。。学习
------解决方案--------------------没太明白:如果本层有4个节点,那就把第4个放到第1个的下层去;如果有5个,那就把第5个放到第2个的下层。那么,当本层有7个的时候,第7个怎么处理?又重复放到第1个下层吗?
------解决方案--------------------
------解决方案--------------------此外,第7个和第4个如何安排?等到第7个下放之后再处理下层呢?还是第4个就先处理了,等到第7个到来再重新处理一次?
按示例中的变化,看不出这些处理方式来。
------解决方案--------------------看不懂~~~~~
------解决方案--------------------树是用什么存的?需要代码?
------解决方案--------------------比如root的子节点有超过六个了,应该怎么移动?
------解决方案--------------------XML
假设节点都有一个本层的index(从0开始)。
递归方法(Root节点)
{
将本层所有子节点设置属性index(从0开始)
if 本层子节点个数 > 3
{
遍历index>2的节点向第 index %3 子节点 追加 该节点
}
foreach(节点 in 所有子节点)
{
递归方法(节点)
}
}
------解决方案--------------------和我理解有点不一样。。。。
------解决方案--------------------
------解决方案--------------------比如W7,没被放在WA的下面,而是放到了WB的下面。
------解决方案--------------------这个和我的理解是一样的。。
------解决方案--------------------
------解决方案--------------------的确缺少条件没有办法写啊。。。。。。
------解决方案--------------------递归吧。遍历wa,wb,h,l,w7完把l加到wa的子层,w7加到wb的子层
------解决方案--------------------看不出规律啊,这样的时间复杂度什么的难搞啊!
------解决方案--------------------仔细想了想,觉得其实两种处理方式是差不多的。下面的算法先下挂子节点,最后统一递归处理。运行效率要比下挂一个就处理一个更高些。
C# code
class node
{
private string name;
private node son;
private node brother;
public void Sort()
{
node[] p = new node[3]; // 节点数组,用于暂存3个子节点
node q,r=null;
int i = 0;
q = this.son;
while (q != null && i < 3) // 若当前节点有子节点,则循环给数组赋值
{
p[i] = q;
i++;
r = q;
q = q.brother;
} // 循环结束后,q指向第4子节点(存在的话),同时r指向第3子节点
// 若不存在第4节点,则q为null,r指向最后子节点。
i = 0;
while (q != null) // 若还有未处理的子节点,则进行处理
{
r.brother = q.brother; // 摘下需要下挂的