は今の私のループはTreeNode最初の列挙型の幅は?
for (TreeNode n = e.Node.FirstNode; n != null; n = n.NextNode)
で、私のデータは、私は(A2など、Bなどではなく、A1、)のみ幅を列挙したい
a
a1
a2
b
b1
のようなものです。私はこれをどのようにして行うのですか?
は今の私のループはTreeNode最初の列挙型の幅は?
for (TreeNode n = e.Node.FirstNode; n != null; n = n.NextNode)
で、私のデータは、私は(A2など、Bなどではなく、A1、)のみ幅を列挙したい
a
a1
a2
b
b1
のようなものです。私はこれをどのようにして行うのですか?
通常、最初の列挙は、補助データ構造として何らかの種類のキューを使用して行われます。
まず、ルートにキューを押します。その後 、キューの中の何かがある間:
TreeNodeCollection nodes;
if(e.Node.Parent != null)
{
nodes = e.Node.Parent.Nodes;
}
else
{
nodes = e.Node.TreeView.Nodes;
}
を使用する必要があります
foreach (TreeNode n in e.Node.Parent.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>();
}
修正コード:bstoney 1. pu shルートノードからcurrentLevelキューへ 2.マークnextLevel = new Queue();
Queue<TreeNode> currentLevel = new Queue<TreeNode>();
Queue<TreeNode> nextLevel = new Queue<TreeNode>();
// 1. push root to the queue
currentLevel.Enqueue(treeView1.Nodes[0]);
// pop the first item from the front of the queue
while (currentLevel.Count > 0)
{
while (currentLevel.Count > 0)
{
TreeNode n = currentLevel.Dequeue();
Console.WriteLine(n.Text);
// Add child items to next level
foreach (TreeNode child in n.Nodes)
{
nextLevel.Enqueue(child);
}
}
// Switch to next level
currentLevel = nextLevel;
// 2. mark this line
//nextLevel = new Queue<TreeNode>();
}