下面的代码将访问每个节点并完全遍历它,深度优先,直到它到达一个叶子.然后,当它展开堆栈时,将调用DoSomethingWithNode每个节点.该depth参数用于向您显示以相反顺序返回节点.
void ReverseTraverse(TreeNodeCollection nodes, int depth)
{
if (nodes == null) return;
foreach (TreeNode child in nodes)
{
ReverseTraverse(child.Nodes, depth+1);
DoSomethingWithNode(child, depth);
}
}
Run Code Online (Sandbox Code Playgroud)
要调用它,假设它MyTreeView是一个TreeView实例:
ReverseTraverse(MyTreeView.Nodes, 1);
Run Code Online (Sandbox Code Playgroud)
请注意,这不会首先为您提供最深的叶节点,而只是确保在其父节点之前输出任何叶节点.如果您的树看起来像这样:
Node 1
Node 1.1
Node 1.2
Node 1.2.1
Node 2
Node 2.1
Node 2.1.1
Node 2.1.1.1
Node 2.1.2
Run Code Online (Sandbox Code Playgroud)
输出顺序为:
Node 1.1
Node 1.2.1
Node 1.2
Node 1
Node 2.1.1.1
Node 2.1.1
Node 2.1.2
Node 2.1
Node 2
Run Code Online (Sandbox Code Playgroud)
如果您想要最深的节点(即节点2.1.1.1将首先输出),那么您必须进行完全遍历(以正向顺序最简单)并构建具有相应深度的节点列表.然后按深度(降序)对列表进行排序并按顺序输出.
| 归档时间: |
|
| 查看次数: |
4318 次 |
| 最近记录: |