码迷,mamicode.com
首页 > 其他好文 > 详细

笛卡尔树

时间:2020-09-23 23:50:26      阅读:43      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!