线段树节点个数的递推公式与通项公式
不用二叉堆而是用含有指针域的节点构造线段树的话,其所需节点个数与区间长度N的关系是什么呢?
递推公式
记f(x)表示根节点区间长度为x的线段树的节点个数, 那么有:
/ 2f(x/2) + 1, 当x>1且x为偶数时;
f(x) = | f((x+1)/2) + f((x-1)/2) + 1, 当x>1且x为奇数时;\ 1, 当x=1时。
这条递推公式与区间划分的递归步骤有相似之处。
通项公式
前4项的结果
x 1 2 3 4 ...
f(x) 1 3 5 7 ...
猜测:
f(x) = 2x - 1
神奇,原先的递推公式描述的竟然是奇数!
证明:
定理:“对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。”
由于线段树对区间作划分时总是分割成左右两个子区间,因此线段树里只有度为0和度为2的节点。而最终是分割至区间长度为1的叶子节点,因此所有叶子节点个数之和为根节点区间N。
n0 = N; n2 = n0 - 1; 总节点个数= n0 + n2 = 2N - 1;
原来如此。
定理n0=n2+1的证明
设二叉树总节点数目为N,有
N=N0+N1+N2——(公式1)
二叉树度数总和为 0*N0+1*N1+2*N2;
而由二叉树的图形可以看出除根节点外,每个结点上方对应着一个度(为更形象,可以理解成结点自己的头上有一根“绳子”挂着自己)(可验证当仅有根节点时也满足这个规律),所以结点总数比度数多1,则有
N=N1+2*+1——(公式2)
公式1代入公式2即可得出:
N0=N2+1
线段树节点个数的递推公式与通项公式相关推荐
- 【Java数据结构】BST树(二叉搜索树)总结03(求BST树高度,求BST树节点个数)
二叉树总结:入口 二叉树的基本操作: 1.插入,删除 操作 2.前.中.后序遍历,层序遍历 3.求BST树高度,求BST树节点个数 4.返回中序遍历第k个节点的值 5.判断一个二叉树是否是BST树,判 ...
- 数据结构---线段树
线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326 持续更新中··· 一:线段树基本概念 1:概述 线段树 ...
- HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)
磨了一天的线段树,不能说完全搞清楚,只能说有一个大概的了解,靠着模板才把这道题A了,只能说太弱~~! 题意: 初始时有一字符串,全为0. 三种操作: 1 k d - add 把d加到第k个数上去 2 ...
- 数据结构:树套树-替罪羊树套权值线段树
BZOJ3065 本题是在BZOJ上的处女A,实在不应该拿这样一道题来开头 平衡树套线段树应该是树套树问题里比较难的一种了,当然我记得还有一个替罪羊树套Trie树的题,我是不信自己能写出来的. 外层的 ...
- 二逼平衡树——树套树(线段树套Splay平衡树)
题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...
- uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)
线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报 分类: ...
- 2018.3.15校内互测总结-点分治-线段树
这是曾来过咱们学校集训的一位大神出的~ T1 题目大意 给出一棵带边权的无根树,求树上前$k$大的路径的长度. $1 \leq n \leq 200000$ 题解 想了一上午点分治,却发现只会$O(n ...
- 2018.06.28 与或(线段树)
#与或 描述 样例输入 5 8 1 3 2 5 4 3 1 3 2 1 1 5 3 1 3 1 1 4 6 2 3 4 1 3 2 3 2 2 3 4 3 1 5 **样例输出 ** 3 5 3 7 ...
- hdu1166 线段树
线段树就是区间的查找,如果区间不是当前线段树节点的区间,需要划分为左.右,再递归查找 #include <iostream> #include <stdio.h> #inclu ...
最新文章
- 解决 mac ox 终端显示bogon 的问题
- ISLR_Propotion
- u盘扩容软件_扩容盘的认识与检测和量产还原
- druid 多数据源_Druid连接池的使用以及注意事项
- Jmeter中一些概念的理解——90%响应时间、事务、并发
- 精度计算——大数阶乘
- “野火FreeRTOS教程”第7章补充知识点-异常流程
- Stanford CoreNLP依存关系分析、词性标注及句子主语分析(使用Python) 超详细截图手把手教学,新手友好
- Wise Disk Cleaner 免费的磁盘清理和磁盘碎片整理工具
- angularJs监控页面加载完毕
- mcake蛋糕预订图片
- 【内存泄漏】一个现网问题告诉你血淋淋的事实:java内存泄漏很严重
- 分享精美电脑主题壁纸09-01整理更新分享!
- JavaScript高级笔记_002_构造函数和原型
- 计算机组装小白,小白怎么从零开始学组装电脑?
- DAGM2007数据集扩增(COCO格式以及VOC格式的灰度图数据集都可用)
- Linux开发者的CI/CD(10)获取Jenkins project构建结果
- 【思科设备命令最全合集,快快收藏!】
- 派克Parker防爆伺服电机与普通伺服电机区别
- 【规则引擎】一、规则引擎简介
热门文章
- 项目管理:成为项目经理,是怎样的经历?
- 如何做好一个IT项目经理? (一)
- 流媒体直播防盗链安全控制
- Bowtie2错误:Could not locate a Bowtie index corresponding to basename /home/s45/mouse
- android XML文件加注释
- pc端编码表必须为gbk才能正常启动软件_【干货】请收下这份非常完整的PCIE4.0 发送端测试SOP...
- hangfire使用笔记
- 加密视频(java加密视频)
- 微信小程序刷新(重载)当前页面的方法,超简单~
- Dapp开发实战:去中心化NFT交易平台