算法问题
我编写了一个图形化编程的程序,通过在按钮之间连线来创建一棵树,然后遍历树来产生代码。但是在编写算法的时候遇到了一些问题,只有第一个被添加的按钮能够加入到树中,并且输出结果。其他后添加的按钮都不能识别。我认为可能发生问题的地方在FindNode()函数或者AddNode()函数中。但是找了很久都没有找到问题所在,请高手帮忙看下,谢谢。分不是问题,如果解决,可以另开帖给分。以下是代码
class CodeTree
{
public CodeTree()
{
tv = new TreeView();
NewTreeNode = new TreeNode[1000];
root = new TreeNode("root");
tv.Nodes.Add(root);
current = new TreeNode("current");
}
//在树中的current结点下添加一个结点
public TreeNode AddNode(CybotButton cb)
{
//新建一个数组
try
{
++i;
NewTreeNode[i] = new TreeNode(i.ToString());
NewTreeNode[i].Text = i.ToString();
NewTreeNode[i].Tag = cb;
TreeNode[] myTreeNodeArray = new TreeNode[1];
myTreeNodeArray[0] = NewTreeNode[i];
//在tv的current结点下添加一个NewTreeNode[i]结点
this.current.Nodes.AddRange(myTreeNodeArray);
}
catch (Exception e)
{
MessageBox.Show(e.Data.ToString());
}
return NewTreeNode[i];
}
//在树中删除掉current结
public void DeleteNode(TreeNode current)
{
//移除当前结点
tv.Nodes.Remove(current);
}
//遍历树,产生代码
public String TraversalTree()
{
//深度优先遍历
String str = "";
str = ShowAllNodes(this.tv.Nodes);
return str;
}
//采用递归的方式遍历树,输出代码
String ShowAllNodes(TreeNodeCollection tv)
{
foreach (TreeNode node in tv)
{
strCode += PrintCode(node) + '\n';
if (node.Nodes.Count > 0)
{
ShowAllNodes(node.Nodes);
}
}
return strCode;
}
//输出单个按钮的代码
public String PrintCode(TreeNode tn)
{
//这里TreeNode始终没有变
CybotButton cb = (CybotButton)tn.Tag;
String str = cb.GenerateCode();
return str;
}
//在树中寻找包含有按钮cb的结点,并返回这个结点
public TreeNode FindNode(TreeView tv,CybotButton cb)
{
TreeNode tnRet = new TreeNode("tnRet") ;
foreach (TreeNode tn in tv.Nodes)
{
//tnRet = FindNode(tn, cb);
if (tn.Tag == cb)
tnRet = tn;
break;
}
this.current = tnRet;
return tnRet;
}
//将以root为根的树整个删掉
public bool DeleteTree()
{
//移除根结点及其所有子结点
this.tv.Nodes.Remove(root);
return true;
}
public TreeNode[] NewTreeNode;
public String strCode;
public TreeNode root;
private TreeNode current;
public TreeView tv;
public static int i = 0;
}