不怕错,就怕曾经对而现在错。昨天关机前还用的好好的算法,今早起来就出了问题(代码没改,机器系统不变)
请大家帮我看下这个TreeView遍历算法有什么隐患?该算法特点是没有用到Stack        public static bool traverse(TreeNodeCollection node, RichTextBox edit)
        {
            if ((node == null) || (node.Count == 0))
            {
                return false;
            }            TreeNode temp = node[0];            edit.Text = "";            while (temp != null)
            {
                while (temp.Nodes.Count > 0)
                {
                    temp = temp.Nodes[0];
                }                edit.Text += temp.Text;
                edit.Text += "\r\n";                if (temp.NextNode != null)
                {
                    temp = temp.NextNode;
                }
                else
                {
                    temp = temp.Parent;
                    if (temp == null)
                    { break; }                    edit.Text += temp.Text;
                    edit.Text += "\r\n";                    temp = temp.NextNode;
                }            }//end while            return true;
        }//end fun

解决方案 »

  1.   

    有问题。例如树形结构如下:
    A
     -A1
      -A11
     -A2
      -A21
    B
     -B1
      -B11当你遍历到A21时(即temp=A21,),执行下面代码[align=left]temp = temp.Parent; 
                        if (temp == null) 
                        { break; }                     edit.Text += temp.Text; 
                        edit.Text += "\r\n";                     temp = temp.NextNode; [/align]
    当执行“temp = temp.Parent;” 时temp值变为A2,
    然后执行“ temp = temp.NextNode;”,这时候temp值(也就是A2.NextNode)为null;按常理这时应该返回到A2.Parent再去遍历,但是你没有返回到A2的Parent。
    按你的代码执行结果就是:
    A11
    A1
    A21
    A2
    连根节点A都没有遍历到。你这个只能遍历A的所有子节点。
    建议用递归算法,或者如你所说用堆栈来遍历。
      

  2.   

                    while (temp.Nodes.Count > 0) 
                    { 
                        temp = temp.Nodes[0]; 
                    } 当某个中间层次有多个节点时只会处理第一个节点。修改的方法...好象除了递归,没有更合适的方法了。:-)不知道说的对不对。
      

  3.   

    感谢各位回贴,特别感谢javabegin ,针对性地找出了偶的问题所在!