【问题标题】:Ada 2012 Multiway Tree, Create Root NodeAda 2012 多路树,创建根节点
【发布时间】:2013-07-14 21:05:16
【问题描述】:

我正在使用多路树的有界版本。我可以创建我的元素类型并实例化我的类型的树,但是如何创建根?我看到了几种形式的 Insert_Child。我使用 Insert_Child 的所有尝试都失败了,因为我使用 No_Element 作为 Parent 或 Before 参数。

有人有使用多路树包的例子吗?

如果重要的话,我正在使用免费的 Gnat 版本的 Ada。

【问题讨论】:

    标签: ada gnat multiway-tree


    【解决方案1】:

    创建Tree类型的变量; ARM 中有一个hint,

    有一个特殊的节点,root,它始终存在并且具有 既不是关联的元素值,也不是任何父节点。根节点 提供将节点添加到其他空树的位置,并且 表示树的基部。

    类似

    with Ada.Containers.Multiway_Trees;
    with Ada.Text_IO; use Ada.Text_IO;
    procedure Mway is
       package Trees is new Ada.Containers.Multiway_Trees (Integer);
       T : Trees.Tree;
       C : Trees.Cursor;
    begin
       C := T.Root;
       T.Append_Child (Parent => C, New_Item => 1);
       T.Append_Child (Parent => C, New_Item => 2);
       for E of T loop
          Put_Line (E'Img);
       end loop;
    end Mway;
    

    输出是

    1
    2
    

    【讨论】:

    • 是的,root功能是你的朋友function Root (Container : Tree) return Cursor;
    【解决方案2】:

    感谢您的回答,但您对根没有元素的描述可能会导致我改变我的设计。我期望构建一个由子组件等组成的组件树。我想将每个元素的属性(例如质量或价格)汇总到组件的总数中,并将其存储在根目录中。

    我想我可以让我创建的第一个节点作为程序集总数的占位符,然后将真正的树分支从中分离出来。看似笨拙但可行。

    /s/鲍勃

    【讨论】:

      【解决方案3】:

      有趣的是,当我尝试示例代码时,我在树迭代器循环中得到了 STORAGE_ERROR。

      我在 Linux 的 Windows 子系统下运行 Debian。 WSL1 不允许您通过 ulimit 调整堆栈大小。

      修复似乎是打开编译器优化:

      ebolar@Beowulf:~/Build/Ada/src$ gnatmake -s -g simpletree
      gcc-6 -c -g simpletree.adb
      simpletree.adb:3:11: warning: file name does not match unit name, should be "mway.adb"
      gnatbind-6 -x simpletree.ali
      gnatlink-6 simpletree.ali -g
      ebolar@Beowulf:~/Build/Ada/src$ ./simpletree
      Load up the tree
      Check out the contents
      
      raised STORAGE_ERROR : stack overflow or erroneous memory access
      
      
      ebolar@Beowulf:~/Build/Ada/src$ gnatmake -s -g -O simpletree
      gcc-6 -c -g -O simpletree.adb
      simpletree.adb:3:11: warning: file name does not match unit name, should be "mway.adb"
      gnatbind-6 -x simpletree.ali
      gnatlink-6 simpletree.ali -g -O
      ebolar@Beowulf:~/Build/Ada/src$ ./simpletree
      Load up the tree
      Check out the contents
       1
       2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-16
        相关资源
        最近更新 更多