标签:com 维护 先序遍历 img art 先序 二叉搜索树 sdn 完成
//https://blog.csdn.net/code92007/article/details/94591571
笛卡尔树是形如上图的一棵树,每个点有值{Key,Val},Val满足堆的性质,Key满足二叉搜索树性质
构造(区间最小): O(n)
性质1:对于已经构造好的笛卡尔树,子树的根节点的Val最小
性质2:通过先序遍历可以得到Key从小到大的数列
考虑按Key从小到大的顺序构造笛卡尔树,1-K-1已经构造完成,现插入第K个数
根据性质2,可以发现K一定在树的右右右……儿子,且没有右儿子
根据性质1,可以发现K的左儿子一定比它大,K的父亲一定比它小
所以可以用一个栈维护笛卡尔树的右链(仅有右儿子组成的链),每次找到第一个<=Val[K],裂开,插入,维护,均摊O(1)
标签:com 维护 先序遍历 img art 先序 二叉搜索树 sdn 完成
原文地址:https://www.cnblogs.com/wsfwsf/p/13707659.html