【问题标题】:Contructing a special tree, from numerical sequence从数字序列构造一棵特殊的树
【发布时间】:2021-08-06 00:28:59
【问题描述】:

我有一个有趣的任务,但我不知道如何解决它。

对于给定序列 a= (a1, . . . , an) 没有重复元素的最小二叉树 M(a) 定义如下:则M(a)的根为ai,其左子树为M(a1,...,ai-1),其右子树为M(ai+1,...,an)。 M(∅) 是一棵空树。对于给定的序列,在 O(n) 中构造一个最小树。请注意,子树也是 M,因此它们必须遵循规则。

这里的例子。 谢谢帮忙。

【问题讨论】:

    标签: graph binary-tree theory


    【解决方案1】:

    它被称为笛卡尔树。关于在此处创建的文章:https://iq.opengenus.org/cartesian-tree/

    【讨论】:

    【解决方案2】:
    C:\Users\James\code\minbin>minbin
    1 -> 2
    2 -> 3
    3 -> 7
    3 -> 5
    5 -> 11
    5 -> 8
    8 -> 15
    8 -> 19
    1 -> 12
    12 -> 13
    

    你可以在https://gist.github.com/JamesBremner/ac9ad8db15eafaad57a89532e64ff7bf看到产生这个输出的代码

    算法是递归的:

    • 找到最小的元素
    • 将父级链接到最小的
    • 拆分剩余号码
    • 如果 left 是单个,则从最小开始链接,否则再次调用 split
    • 如果右为单,则从最小链接,否则再次调用拆分
    • 返回

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2017-08-10
      • 1970-01-01
      相关资源
      最近更新 更多