TreeNode广度第一个枚举?

时间:2009-03-08 23:35:00

标签: c# breadth-first-search

现在我的循环是

for (TreeNode n = e.Node.FirstNode; n != null; n = n.NextNode)

和我的数据类似

a
    a1
    a2
b
    b1

我想只限制广度(a,b等,而不是a1,a2等)。我该怎么做?

3 个答案:

答案 0 :(得分:4)

广度优先通常通过使用某种队列作为辅助数据结构来完成。

首先将根推入队列。 然后,队列中有一些东西:

  • 弹出前面的第一个项目 队列。
  • 将其孩子推到队列的末尾。
  • 处理您弹出的项目。

答案 1 :(得分:0)

尝试

foreach (TreeNode n in e.Node.Parent.Nodes)

您可能需要检查空父级并使用

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>();
}

答案 2 :(得分:0)

修改bstoney提供的代码 1.将根节点推送到currentLevel队列 2. mark nextLevel = new Queue();

 TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String deviceId;
if (telephonyManager.getDeviceId() != null)
    deviceId = telephonyManager.getDeviceId(); //*** use for mobiles
else {
    deviceId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
}
return deviceId;