求一算法

z9945 2005-08-31 11:22:46
表结构:
id 名称 类型1 类型2 类型3 父id
1 name lx11 lx21 lx31 0
2 name1 lx12 lx22 lx32 0
3 name2 lx11 lx21 lx31 1

现在要排成这样的树:
类型1
|____类型2
|______类型3
|________名称
|_____子名称
即:

lx11
| |____lx21
| |____lx31
| |______name
lx12 |_____name2
|____lx22
|____lx32
|______name1
...全文
156 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
givenchy 2005-09-01
递归 从父节点id为0开始。
  • 打赏
  • 举报
回复
guyan033 2005-09-01
用最笨的方法作的(虽找到一定的规律性但是由其中有对库的查询就不知道如何写成递归了的形式了)

private void Form1_Load(object sender, System.EventArgs e)
{
oleDbConnection1.Open ();
oleDbDataAdapter1=new System.Data.OleDb.OleDbDataAdapter ("select * from lx where parentname=0",oleDbConnection1);

oleDbDataAdapter1.Fill (dataSet11,"lx");

for( i=0;i<dataSet11.Tables ["lx"].Rows .Count ;i++)
{

TreeNode tn=new TreeNode(dataSet11.Tables ["lx"].Rows[i]["type1"].ToString ());
TreeNode tn1=new TreeNode(dataSet11.Tables ["lx"].Rows[i]["type2"].ToString ());
TreeNode tn2=new TreeNode(dataSet11.Tables ["lx"].Rows[i]["type3"].ToString ());
TreeNode tn3=new TreeNode (dataSet11.Tables ["lx"].Rows [i]["name"].ToString ());

oleDbDataAdapter1=new System.Data.OleDb.OleDbDataAdapter ("select * from lx where parentname="+dataSet11.Tables ["lx"].Rows[i]["id"].ToString (),oleDbConnection1);

oleDbDataAdapter1.Fill (dataSet21,"lx");
TreeNode tn4;
if(dataSet21.Tables ["lx"].Rows .Count !=0)
{
tn4=new TreeNode (dataSet21.Tables ["lx"].Rows [0][1].ToString ());
tn3.Nodes .Add (tn4);
}
dataSet21.Tables ["lx"].Clear() ;
tn2.Nodes .Add (tn3);
tn1.Nodes .Add (tn2);
tn.Nodes .Add (tn1);
treeView1.Nodes .Add (tn);
}
}
你看一下你能把它改写成递归的形式吗?
  • 打赏
  • 举报
回复
z9945 2005-08-31
不是呀.

类型1,类型2,类型3之间没有父子级关系的.
有父子关系的只是name
  • 打赏
  • 举报
回复
TechEye 2005-08-31
楼主先按简单思路实现如下
name
| |___name1
name2

设name1节点为 treeNode1;

那么,加入同级节点,只要
treeNode1.Parent.Nodes.Add("lx11");
treeNode1.Parent.Nodes.Add("lx21");
treeNode1.Parent.Nodes.Add("lx31);

没加一点难度啊
  • 打赏
  • 举报
回复
z9945 2005-08-31
感觉是应该先分组..
  • 打赏
  • 举报
回复
z9945 2005-08-31
如果是
name
| |___name1
name2
我知道递归.

但上面这种格式递归从什么开始呢?
  • 打赏
  • 举报
回复
lovvver 2005-08-31
关注一把
这个规律很好把握的,楼主自己尝试写一下先
  • 打赏
  • 举报
回复
TechEye 2005-08-31
楼主,这有何难
1) 递归 (这个应该会吧)
2) 每个节点的特点: name 与 lx11 lx21 lx31同级
  • 打赏
  • 举报
回复
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2005-08-31 11:22
社区公告

让您成为最强悍的C#开发者