我已经编写了构建二叉树的函数,它可以工作,但我不知道如何在我的界面中绘制树。 我写的用于查找二叉树的函数如下所示:
private Node BuildTreeFromPostAndMid(string Post, string Mid)
{
char genc=Post[Post.Length - 1];
Node gen = new Node(genc);
string[] s = Mid.Split(genc);
if (s[0] != "")
{
int l1 = s[0].Length;
string newh = "";
for (int i = 0; i < Post.Length - l1 + 1; i++)
{
if (IsSame(Post.Substring(i, l1), s[0]))
{
newh = Post.Substring(i, l1);
}
}
gen.lc = BuildTreeFromPostAndMid(newh, s[0]);
}
else gen.lc = null;
if (s[1] != "")
{
int l2 = s[1].Length;
string newh = "";
for (int i = 0; i < Post.Length - l2 + 1; i++)
{
if (IsSame(Post.Substring(i, l2), s[1]))
{
newh = Post.Substring(i, l2);
}
}
gen.rc = BuildTreeFromPostAndMid(newh, s[1]);
}
else gen.rc = null;
return gen;
}
在UI中,用户可以输入Post order和mid order遍历二叉树系列,我应该在我的界面中的某个地方绘制树(我没有足够的信用来上传我的图片,所以我输入它,希望你能理解我说的话吗?
答案 0 :(得分:0)
几年前,我必须在Silverlight,WPF和WinForms中做类似的事情。你有多种选择。
使用标准的TreeView控件,我最初在WinForms中执行此操作。它不会像其他解决方案那样漂亮,但实施起来很快。您可以将一些工作放入其中并根据需要进行自定义。这已经完成,例如go here。
通过嵌套控件容器构建UI树。每个容器实际上都是一个节点,它包含当前节点的数据及其子节点(每个子节点的容器等)。这将是一个递归结构,这就是我在Silverlight和WPF中显示我的树的方式。实现起来很简单,对齐是自动进行的,我认为我使用StackPanel作为容器并定义了一个自定义控件来显示当前节点。但要小心,它可能会导致性能问题取决于树的深度(指数增长),但是,我们没有。
在画布中构建UI树,这就是我最终在WinForms中做到的。这需要更多的工作,因为你需要自己处理对齐。作为粗略指南,画布的宽度将按照您拥有的叶子数量进行分割,并将高度分割为树的级别。您基本上在树上执行DFS并将节点从下到上添加到画布。正如我所说,你必须做更多工作才能使对齐正确,但这可能是值得的。
研究适合您需求的自定义控件,我很确定您会发现一些,这是一个不常见的问题,必须显示树状结构。