今、私のループは
for (TreeNode n = e.Node.FirstNode; n != null; n = n.NextNode)
私のデータは次のようなものです
a
a1
a2
b
b1
幅のみを列挙したい(a1、a2などではなく、a、bなど)。どうすればいいですか?
今、私のループは
for (TreeNode n = e.Node.FirstNode; n != null; n = n.NextNode)
私のデータは次のようなものです
a
a1
a2
b
b1
幅のみを列挙したい(a1、a2などではなく、a、bなど)。どうすればいいですか?
幅優先列挙は通常、補助データ構造として何らかのキューを使用して行われます。
最初にルートをキューにプッシュします。次に、キューに何かがある間:
試す
foreach (TreeNode n in e.Node.Parent.Nodes)
null の親を確認して使用する必要がある場合があります
TreeNodeCollection nodes;
if(e.Node.Parent != null)
{
nodes = e.Node.Parent.Nodes;
}
else
{
nodes = e.Node.TreeView.Nodes;
}
これは、幅優先アルゴリズムをカバーする必要があります(申し訳ありませんが、テストしていません)
Queue<TreeNode> currentLevel = new Queue<TreeNode>( nodes );
Queue<TreeNode> nextLevel = new Queue<TreeNode>();
while( currentLevel.Count > 0 )
{
while( currentLevel.Count > 0 )
{
TreeNode n = currentLevel.Dequeue();
// Add child items to next level
foreach( TreeNode child in n.Nodes )
{
nextLevel.Enqueue( child );
}
}
// Switch to next level
currentLevel = nextLevel;
nextLevel = new Queue<TreeNode>();
}