如何使用C#中的函数绘制二叉树结构

时间:2015-06-11 13:20:39

标签: c#

我已经编写了构建二叉树的函数,它可以工作,但我不知道如何在我的界面中绘制树。 我写的用于查找二叉树的函数如下所示:

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遍历二叉树系列,我应该在我的界面中的某个地方绘制树(我没有足够的信用来上传我的图片,所以我输入它,希望你能理解我说的话吗?

1 个答案:

答案 0 :(得分:0)

几年前,我必须在Silverlight,WPF和WinForms中做类似的事情。你有多种选择。

  1. 使用标准的TreeView控件,我最初在WinForms中执行此操作。它不会像其他解决方案那样漂亮,但实施起来很快。您可以将一些工作放入其中并根据需要进行自定义。这已经完成,例如go here

  2. 通过嵌套控件容器构建UI树。每个容器实际上都是一个节点,它包含当前节点的数据及其子节点(每个子节点的容器等)。这将是一个递归结构,这就是我在Silverlight和WPF中显示我的树的方式。实现起来很简单,对齐是自动进行的,我认为我使用StackPanel作为容器并定义了一个自定义控件来显示当前节点。但要小心,它可能会导致性能问题取决于树的深度(指数增长),但是,我们没有。

  3. 在画布中构建UI树,这就是我最终在WinForms中做到的。这需要更多的工作,因为你需要自己处理对齐。作为粗略指南,画布的宽度将按照您拥有的叶子数量进行分割,并将高度分割为树的级别。您基本上在树上执行DFS并将节点从下到上添加到画布。正如我所说,你必须做更多工作才能使对齐正确,但这可能是值得的。

  4. 研究适合您需求的自定义控件,我很确定您会发现一些,这是一个不常见的问题,必须显示树状结构。