算法问题

卡卡Gemini 卡卡Gemini 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我编写了一个图形化编程的程序,通过在按钮之间连线来创建一棵树,然后遍历树来产生代码。但是在编写算法的时候遇到了一些问题,只有第一个被添加的按钮能够加入到树中,并且输出结果。其他后添加的按钮都不能识别。我认为可能发生问题的地方在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;

}
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
卡卡Gemini
C# 111,129 成员 642,538 内容