Graph 从数字序列构造一棵特殊的树

Graph 从数字序列构造一棵特殊的树,graph,binary-tree,theory,Graph,Binary Tree,Theory,我有一个有趣的任务,但我不知道如何解决它 给定序列a=(a1,…,an)无重复元素的最小二叉树M(a)定义如下:Be ai是(a1,…,an)的最小数,然后M(a)的根是ai,其左子树是M(a1,…,ai-1),其右子树是M(ai+1,…,an)。M(∅) 是一个空树。对于给定的序列,在O(n)中构造一个最小树。请注意,子树也是M,因此它们必须遵循规则 这里举个例子。 Thx寻求帮助。它被称为笛卡尔树。关于创建笛卡尔树的文章如下: 您可以在以下位置看到生成此输出的代码: 该算法是递归的: 求

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

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

这里举个例子。
Thx寻求帮助。

它被称为笛卡尔树。关于创建笛卡尔树的文章如下:

您可以在以下位置看到生成此输出的代码:

该算法是递归的:

  • 求最小元素
  • 将父对象链接到最小对象
  • 拆分剩余的数字
  • 如果left是single,则从最小的链接开始,否则再次调用split
  • 若右键为单键,则从最小的链接开始,否则再次调用split
  • 返回

你可以在这里看到实现@risingStark是的,但在Geeksforgek上他们没有O(n),而是O(n^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