高分求助啊,算法啊,这种结构如何排序呢?
原结构:
假设根节点为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个下层吗?
[解决办法]
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; // 摘下需要下挂的节点 q.brother = p[i].son; // 挂入指定的节点下 p[i].son = q; q = r.brother; // 移动到下一节点 i = ++i % 3; } r.brother = null; for (i = 0; i < 3; i++) // 递归处理所有子节点 { if (p[i] != null) p[i].Sort(); else break; } } }
[解决办法]
上面的算法里有个bug:
当前节点没有子节点时r.brother=null;会出错。
解决的方法是在第一个循环前插入一句:
if (q=null) return;
[解决办法]
能不能结贴的时候把怎么处理的大致思路写上,让大家做个参考