笛卡尔树
用的有点少的数据结构
笛卡尔树
前置知识
单调栈
正文
性质
笛卡尔树,是一种不常用的数据结构吧,其同时满足二叉搜索树和小根堆的性质
假设们有一个数组,将其数组的下标记为,其权值记为,那么建成的笛卡尔树满足以下性质:
- 值满足二叉搜索树的性质,
- 值满足小根堆的性质,
建树
首先加入第个数时,肯定在构成的树右链的末尾节点,此时先插入,将其插到右链末尾节点,但此时这颗树不一定满足第二个性质,需要对其进行调整,若此时的父节点的值比大,一直找到右链上值比小的然后,先将节点的左儿子设为这个节点的右儿子,再将这个节点的右儿子设为,将个点插入后,即可得到一棵笛卡尔树。
1 | void build() |
问题
我也不知道能干啥 🙃