A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© .net_交流 中级黑马   /  2014-7-29 10:16  /  1180 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 .net_交流 于 2014-7-29 15:31 编辑
  1. //排列树状目录
  2.         public static void ByQueue(string path,TreeNode tNode)
  3.         {
  4.             Queue<string> queue = new Queue<string>();

  5.             queue.Enqueue(path);
  6.             while (queue.Count > 0)
  7.             {  
  8.                 string head = queue.Dequeue();//出队从队头出
  9.                 TreeNode  nNode= tNode.Nodes.Add(Path.GetFileName(head));
  10.                 string[] dirs = Directory.GetDirectories(head);
  11.                 string[] files = Directory.GetFiles(head);
  12.                 for (int i = 0; i < dirs.Length; i++)
  13.                 {
  14.                     queue.Enqueue(dirs[i]);
  15.                     nNode.Nodes.Add(Path.GetFileName(dirs[i]));
  16.                 }
  17.             }
  18.         }
复制代码


代码错了,和预想不一样,有没有大神可以写一个正确的队列遍历,三Q了

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 _xixi_ 于 2014-7-29 13:11 编辑
  1. public void ByQueue(string path, TreeNode tNode)
  2.         {
  3.             Queue<TreeNode> node = new Queue<TreeNode>();

  4.             TreeNode nNode=null;

  5.             do
  6.             {
  7.                 if (tNode == null)
  8.                 {
  9.                     //tvMain 是TreeView面板的名字
  10.                     nNode = tvMain.Nodes.Add(Path.GetFileName(path));
  11.                     nNode.Tag = path;
  12.                     node.Enqueue(nNode);
  13.                     tNode = nNode;
  14.                 }
  15.                 else
  16.                 {
  17.                     tNode = node.Dequeue();

  18.                     //获取当前目录的子目录
  19.                     string[] dirs = Directory.GetDirectories(tNode.Tag.ToString());

  20.                     //每个节点的子节点也添加到队列里
  21.                     for (int i = 0; i < dirs.Length; i++)
  22.                     {
  23.                         nNode = tNode.Nodes.Add(Path.GetFileName(dirs[i]));
  24.                         nNode.Tag = dirs[i];
  25.                         node.Enqueue(nNode);
  26.                     }

  27.                 }
  28.             } while (node.Count > 0);
  29.         }
复制代码
在load方法添加ByQueue(路径, null);  就可以了

评分

参与人数 1技术分 +1 收起 理由
陈君 + 1

查看全部评分

回复 使用道具 举报 1 0
_xixi_ 发表于 2014-7-29 11:24
在load方法添加ByQueue(路径, null);  就可以了

谢谢,学到了,没想到用<TreeNode>  泛型,一直用Queue<string> 想两天了也没想出来,不知道用<string> 这题能做不 ??:lol 大神能帮帮忙吗?
回复 使用道具 举报
如果队列里面存的是string的话,那每次删除队头的时候你要保证知道这个string对应的是哪个节点,感觉很有难度,再定义一个队列来存储节点,就有些累赘了;我也不是大神,只是我刚好做过这类题而已,哈哈~交流嘛
回复 使用道具 举报 1 0
_xixi_ 发表于 2014-7-29 15:33
如果队列里面存的是string的话,那每次删除队头的时候你要保证知道这个string对应的是哪个节点,感觉很有难 ...

是滴是滴。。。。。:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马