初学 笛卡尔树

表示之前没见过这种东西。

概念

Link

初学 笛卡尔树

构造

知乎

以下均假设原序列元素两两不相同。

从左至右依次加入元素,维护当前笛卡尔树的右耳子链

\[root\to rson\to rson.rson\to rson.rson.rson\dots \]

至一个栈内。

设加入的节点为 \(x\),\(t\) 为当前笛卡尔树。

  1. 找到栈中最靠顶部的节点 \(y\) 使得 \(val[y]<val[x]\)。

  2. 特判 \(y\) 为栈顶,直接 \(t[y].rson:=x\) 即可结束。

  3. 记栈中 \(y\) 的楼上为 \(z\)

时间 \(O(n)\)

上一篇:043-PHP简单获得一个类对应的反射信息


下一篇:043 组合数据类型小结