日期:2014-05-17  浏览次数:21264 次

ASP中这种循环怎么写?今天刚接到的项目
一种金字塔的模式       A
                                    /   \
                                  B       C
                                /   \   /   \
                              E     F   G     H
一开始   E   F   G   H   都是相等的   ,就是说最低一层一开始都是相等
如果E   =   F,那么   B=B+10
如果G   =   H,那么   C=C+10
如果B   =   C,那么   A=A+10

现在如果只有3级   我代码写出来了   关键是如果是N级   这个循环该怎么写?

------解决方案--------------------
两张表,一张描述用户树结构的表,一张用户等级表
表一:
id 用户名 level
1 a 0
2 b 0
3 c 0
4 e 0
5 f 0
6 g 0
7 h 0


表二用户树结构的表:
id 用户id 父用户id 节点列表 节点深度
1 1 1 1 0
2 2 1 1,2 1
3 3 1 1,2 1
4 4 2 1,2,4 2
5 5 2 1,2,5 2
6 6 3 1,3,6 2
7 7 3 1,3,7 2


------解决方案--------------------
给你个思路,就是查询数据的时候,对查询条件进行判断。既然你已经实现了第一步,第二步很容易就可以弄出来了……当时我只用了不到两小时就搞定了~
------解决方案--------------------
不是二叉吧,没有规定一个人只能推荐两个人吧,推荐四个人不行吗?
我觉得你在数据库里解决好点.每个结点加一个权值,权值就其下一级子结点的加权.插入某两个子结点的时候,用递归更新其所有父结点的权值就行了.
------解决方案--------------------
当前节点Nn,当前层Ln,
求父节点Parent(N)
子节点集合Children(N)

如果每个节点下最多只能有两个子节点,会相对简单:
1: 当前层的兄弟节点数为2,则继续(可以合并下条规则一起处理)
2: 往上求父节点Ni直至顶Li(Ln--> 1),
遍历树Ni下的所有层次在(Li+1, Ln)之间的子节点总数满足2^(Ln - Li),
则父节点升级,否则退出
这样可以利用数据库查询实现

如果可能出现多子节点:
1: 当前层的兄弟节点数为2,则继续
2: 往上求父节点Ni直至顶Li(Ln--> 1),
遍历树Ni下的所有层次(包括Ni)在(Li, Ln-1)之间的子节点的子节点数> =2,
则父节点升级,即如果 <2则退出
可以考虑用递归实现

优化一点的办法的改进是
2: 往上求父节点Ni直至顶Li(Ln--> 1),
先父节点Ni下的兄弟节点Bi, 如果存在则继续
再处理兄弟节点Bi,如果层次 <Ln则需要,遍历树Bi下的所有层次
在(Li, Ln-1)之间的子节点的子节点数> =2,
则父节点升级,即如果 <2则退出