不用二叉堆而是用含有指针域的节点构造线段树的话,其所需节点个数与区间长度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

线段树节点个数的递推公式与通项公式相关推荐

  1. 【Java数据结构】BST树(二叉搜索树)总结03(求BST树高度,求BST树节点个数)

    二叉树总结:入口 二叉树的基本操作: 1.插入,删除 操作 2.前.中.后序遍历,层序遍历 3.求BST树高度,求BST树节点个数 4.返回中序遍历第k个节点的值 5.判断一个二叉树是否是BST树,判 ...

  2. 数据结构---线段树

    线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326  持续更新中···   一:线段树基本概念 1:概述 线段树 ...

  3. HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)

    磨了一天的线段树,不能说完全搞清楚,只能说有一个大概的了解,靠着模板才把这道题A了,只能说太弱~~! 题意: 初始时有一字符串,全为0. 三种操作: 1 k d - add  把d加到第k个数上去 2 ...

  4. 数据结构:树套树-替罪羊树套权值线段树

    BZOJ3065 本题是在BZOJ上的处女A,实在不应该拿这样一道题来开头 平衡树套线段树应该是树套树问题里比较难的一种了,当然我记得还有一个替罪羊树套Trie树的题,我是不信自己能写出来的. 外层的 ...

  5. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

  6. uscao 线段树成段更新操作及Lazy思想(POJ3468解题报告)

    线段树成段更新操作及Lazy思想(POJ3468解题报告) 标签: treequerybuildn2cstruct 2011-11-03 20:37 5756人阅读 评论(0) 收藏 举报  分类: ...

  7. 2018.3.15校内互测总结-点分治-线段树

    这是曾来过咱们学校集训的一位大神出的~ T1 题目大意 给出一棵带边权的无根树,求树上前$k$大的路径的长度. $1 \leq n \leq 200000$ 题解 想了一上午点分治,却发现只会$O(n ...

  8. 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 ...

  9. hdu1166 线段树

    线段树就是区间的查找,如果区间不是当前线段树节点的区间,需要划分为左.右,再递归查找 #include <iostream> #include <stdio.h> #inclu ...

最新文章

  1. 解决 mac ox 终端显示bogon 的问题
  2. ISLR_Propotion
  3. u盘扩容软件_扩容盘的认识与检测和量产还原
  4. druid 多数据源_Druid连接池的使用以及注意事项
  5. Jmeter中一些概念的理解——90%响应时间、事务、并发
  6. 精度计算——大数阶乘
  7. “野火FreeRTOS教程”第7章补充知识点-异常流程
  8. Stanford CoreNLP依存关系分析、词性标注及句子主语分析(使用Python) 超详细截图手把手教学,新手友好
  9. Wise Disk Cleaner 免费的磁盘清理和磁盘碎片整理工具
  10. angularJs监控页面加载完毕
  11. mcake蛋糕预订图片
  12. 【内存泄漏】一个现网问题告诉你血淋淋的事实:java内存泄漏很严重
  13. 分享精美电脑主题壁纸09-01整理更新分享!
  14. JavaScript高级笔记_002_构造函数和原型
  15. 计算机组装小白,小白怎么从零开始学组装电脑?
  16. DAGM2007数据集扩增(COCO格式以及VOC格式的灰度图数据集都可用)
  17. Linux开发者的CI/CD(10)获取Jenkins project构建结果
  18. 【思科设备命令最全合集,快快收藏!】
  19. 派克Parker防爆伺服电机与普通伺服电机区别
  20. 【规则引擎】一、规则引擎简介

热门文章

  1. 项目管理:成为项目经理,是怎样的经历?
  2. 如何做好一个IT项目经理? (一)
  3. 流媒体直播防盗链安全控制
  4. Bowtie2错误:Could not locate a Bowtie index corresponding to basename /home/s45/mouse
  5. android XML文件加注释
  6. pc端编码表必须为gbk才能正常启动软件_【干货】请收下这份非常完整的PCIE4.0 发送端测试SOP...
  7. hangfire使用笔记
  8. 加密视频(java加密视频)
  9. 微信小程序刷新(重载)当前页面的方法,超简单~
  10. Dapp开发实战:去中心化NFT交易平台