怎么样获取一颗树的所有叶子节点

BigIdiot628 2005-07-15 08:40:53
在winform 中,有一颗树,怎么样获取它的所有叶子节点??
...全文
753 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang20052008 2005-07-15
  • 打赏
  • 举报
回复
要保存叶子节点将MessageBox.Show(TNode.Text.ToString());改为向数据库插入数据即可
yang20052008 2005-07-15
  • 打赏
  • 举报
回复
private void GetLeafNode(TreeNodeCollection tc)
{
foreach(TreeNode TNode in tc)
{
if(TNode.Nodes.Count==0)
{
MessageBox.Show(TNode.Text.ToString());

}
GetLeafNode(TNode.Nodes);

}

}
//调用示例
TreeNodeCollection tc;
tc=treeView1.Nodes;

GetLeafNode(tc);
BigIdiot628 2005-07-15
  • 打赏
  • 举报
回复
我只需要得到叶子节点,并不要分枝节点。
所以不能在表中判断。
只能在生成的树中判断,看树的节点是否还有子节点或它下面的节点数为0
不知道行不行,也不知道怎么样写代码。

新鲜鱼排 2005-07-15
  • 打赏
  • 举报
回复
对于存入数据库中的TreeView信息我一般采用这样的建表方式
TreeViewID(主键)
MyID(本身的ID)
PID(父节点的ID)
MyID PID
1 0
101 1
102 1
这样查询的时候使用递归,查找MyID=1,然后是PID=1,PID=101以此类推。

renyu732 2005-07-15
  • 打赏
  • 举报
回复
http://www.microsoft.com/china/community/Column/30.mspx

http://www.microsoft.com/china/community/Column/21.mspx

http://renyu732.cnblogs.com/archive/2005/06/28/182553.html
BigIdiot628 2005-07-15
  • 打赏
  • 举报
回复
呵呵……楼上的方法是获取除根节点以外的所有节点。
但这并不是我想要的。

我要获取每个节点的叶子节点,仅仅是叶子节点。

我的思路是历遍树,判断,当一个节点没有子节点或下面的节点数为0时,说明此节点为叶子节点,不知道行不行,具体如何写。
sarcophile 2005-07-15
  • 打赏
  • 举报
回复
DataRow currentRow = ...
int currentID = currentRow["ParentID"];
DataRow[] childRows = dataTable.Select("childID = '" + currentID.ToString() + "'");
for(int i=0;i<childRows.length;i++)
ParentNode.Nodes.Add(childRows[i]["caption"]);

随手写的,不足的部分你补一下吧
BigIdiot628 2005-07-15
  • 打赏
  • 举报
回复
有一个表,保存了一些记录。
ParentID 为主键

通过ParentID 和 ChildID分级,当记录一的ParentID为“2” 并且另有三条记录 ChildID也为“2”说明他们是父子关系。
我要读出来,写到树形控件中。

但不知道怎么样写代码,不知道楼上有没有相关的资料或代码
bbwolfcool 2005-07-15
  • 打赏
  • 举报
回复
递归啊,寻找这个树的所有根节点,然后根据根,查找子节点,然后递归,找子节点的子节点
aiur2000 2005-07-15
  • 打赏
  • 举报
回复
我看到过别人写的一个东西,是个固定格式的表,直接用树加载,接点id,后面还有个字段是父接点是谁
BigIdiot628 2005-07-15
  • 打赏
  • 举报
回复
怎么样获取一颗树的所有叶子节点,并把这些节点写入到一个表中.
qpl007 2005-07-15
  • 打赏
  • 举报
回复
获取一颗树的所有叶子节点:
递归遍历树的所有节点,发现该节点下没有子节点的就是了

private void FindLastChildNode(TreeNode node,ArrayList list)
{
if(node.ChildNodes.Count == 0)
list.Add(node);
else
{
foreach(TreeNode n in node.ChildNodes)
this.FindLastChildNode(n,list);
}
}

调用
……
ArrayList list = new ArrayList();
foreach(TreeNode node in TreeView.ChildNodes)
this.FindLastChildNode(node,list);

//这里得到的list里就保存了树的所有“叶子”节点
……

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧