.net中除了递归外,其它的生成树算法

时间:2021-11-27 12:59:40
表结构是  id,name,pid(父id) 
现在用递归算法生成树没有问题,我想问的是有没有其它高效生成树的算法,表中也可以添加字段.(.net开发)

18 个解决方案

#1


oralce数据库好像可以直接取出数来,

#2


oracle 取出的就是这种结构,还需要递归循环生成树

#3


可添加字段就简单了

把节点和根的距离保存起来,取时按(级数,父id,id)排序,这样生成树算法是o(n)的且中间变量数为常数

#4


关键在于树本身就是一种递归定义的数据结构!

因此用递归最合适不过了,当然任何递归算法都可以改为非递归算法!

至于高效的问题,俺觉得与是否递归无关!

#5


请问用汇编还是用c#高效?其实这个就没有意义了,否则你为什么不用汇编呢?

相比之下,递归和非递归的差别要比c#与汇编的差别还大。使用递归可以保持清晰头脑、而且也很高效。

只要经过实际测试证明效率足够就可以了。编程要的是正好合适,而不是过分追求高效(因为那往往丧失可维护性)。

#6


你可以把递归利用堆栈转换为非递归
不过诚如楼上所说,你文档不清楚的话,交班时人家看得一头雾水。。。。。

#7


首先本人在开发的时候也是用递归实现的,发本贴的目的也就是想学习一下怎么用非递归的方法生成树,纯粹的学习,还请各位高手给出一个方案.

#8


#9


把表结构直接写成xml 然后绑定!看到这个结果,你是不是想杀了我啊 

#10


大多数的递归都可以用for循环代替

#11


这样的结构用递归是最好的了,如果不想用递归实现树结构,只能改数据库结构
比如改为(ID,name) 通过ID长度来控制父子关系 比如父ID为 AA 子ID则为AABB 孙子ID为AABBCC
以持类推,在处理时和查询时都非常方便了

#12


该回复于2009-10-19 10:42:42被版主删除

#13


hehe ,帮顶下撒

#14


引用 5 楼 sp1234 的回复:
请问用汇编还是用c#高效?其实这个就没有意义了,否则你为什么不用汇编呢?

相比之下,递归和非递归的差别要比c#与汇编的差别还大。使用递归可以保持清晰头脑、而且也很高效。

只要经过实际测试证明效率足够就可以了。编程要的是正好合适,而不是过分追求高效(因为那往往丧失可维护性)。

这种类比不恰当吧。另外使用递归从来不高效,递归算法占用系统资源非常严重。
至于使用递归可以保持头脑清醒?我看各人的思维方式都不尽相同的。

#15


要高效,不要用这种结构

Code Name 对编码定义规则!  几千行没有一点问题,结构也很清晰明了!

#16


算法也很简单

#17


引用 15 楼 liuzhigang_0625 的回复:
要高效,不要用这种结构

Code Name 对编码定义规则!  几千行没有一点问题,结构也很清晰明了!

能不能大概的介绍一下方法,这个我不知道.

#18


不用递归也可以。一个ORDER BY 就可以了。
ORDER BY PID,ID ,然后 从 ITEM(0)到 ITEM(N-1)直接放到树中就可以了。

#1


oralce数据库好像可以直接取出数来,

#2


oracle 取出的就是这种结构,还需要递归循环生成树

#3


可添加字段就简单了

把节点和根的距离保存起来,取时按(级数,父id,id)排序,这样生成树算法是o(n)的且中间变量数为常数

#4


关键在于树本身就是一种递归定义的数据结构!

因此用递归最合适不过了,当然任何递归算法都可以改为非递归算法!

至于高效的问题,俺觉得与是否递归无关!

#5


请问用汇编还是用c#高效?其实这个就没有意义了,否则你为什么不用汇编呢?

相比之下,递归和非递归的差别要比c#与汇编的差别还大。使用递归可以保持清晰头脑、而且也很高效。

只要经过实际测试证明效率足够就可以了。编程要的是正好合适,而不是过分追求高效(因为那往往丧失可维护性)。

#6


你可以把递归利用堆栈转换为非递归
不过诚如楼上所说,你文档不清楚的话,交班时人家看得一头雾水。。。。。

#7


首先本人在开发的时候也是用递归实现的,发本贴的目的也就是想学习一下怎么用非递归的方法生成树,纯粹的学习,还请各位高手给出一个方案.

#8


#9


把表结构直接写成xml 然后绑定!看到这个结果,你是不是想杀了我啊 

#10


大多数的递归都可以用for循环代替

#11


这样的结构用递归是最好的了,如果不想用递归实现树结构,只能改数据库结构
比如改为(ID,name) 通过ID长度来控制父子关系 比如父ID为 AA 子ID则为AABB 孙子ID为AABBCC
以持类推,在处理时和查询时都非常方便了

#12


该回复于2009-10-19 10:42:42被版主删除

#13


hehe ,帮顶下撒

#14


引用 5 楼 sp1234 的回复:
请问用汇编还是用c#高效?其实这个就没有意义了,否则你为什么不用汇编呢?

相比之下,递归和非递归的差别要比c#与汇编的差别还大。使用递归可以保持清晰头脑、而且也很高效。

只要经过实际测试证明效率足够就可以了。编程要的是正好合适,而不是过分追求高效(因为那往往丧失可维护性)。

这种类比不恰当吧。另外使用递归从来不高效,递归算法占用系统资源非常严重。
至于使用递归可以保持头脑清醒?我看各人的思维方式都不尽相同的。

#15


要高效,不要用这种结构

Code Name 对编码定义规则!  几千行没有一点问题,结构也很清晰明了!

#16


算法也很简单

#17


引用 15 楼 liuzhigang_0625 的回复:
要高效,不要用这种结构

Code Name 对编码定义规则!  几千行没有一点问题,结构也很清晰明了!

能不能大概的介绍一下方法,这个我不知道.

#18


不用递归也可以。一个ORDER BY 就可以了。
ORDER BY PID,ID ,然后 从 ITEM(0)到 ITEM(N-1)直接放到树中就可以了。