树的计算

例子:

理论:

设叶结点数为n0,则树中结点数和总度数分别为
结点数=n0+n1+n2+...+nk
总度数=1×n1 + 2×n2 +...+ k×nk
根据树的性质结点数等于总度数加1,即
n0+n1+n2+...+nk = 1×n1 + 2×n2 +...+ k×nk + 1
得到叶结点数n0 = 1 + 1×n2 + 2×n3 +...+ (k-1)×nk

回楼主:n1+n2+...+nk不包括叶结点,叶结点的度为0

二叉树的度计算 
有一个计算二叉树节点的公式,相信很多人都知道: 
度为0的节点数为度为2的节点数加1,即n0=n2+1,知道这个公式,相关题目就可以轻松解决; 
下面来讨论下如何得出这个公式的: 
设: 
  k:总度数   k+1:总节点数   n0:度为0的节点   n1:度为1的节点   n2:度为二的节点 
根据二叉树中度和节点的守衡原理,可列出以下一组方程: 
k=n2*2+n1; k+1=n2+n1+n0; 
将上面两式相减得到:n0=n2+1; 例【1】:已知767个节点的完全二叉树,求其叶子节点个数? 解析: 
n0=n2+1; n=n0+n1+n2; 
由上面,消掉n2得到:n=2n0+n1-1; 
由于完全二叉树度为1的只有0个或1个两种情况,所以,将0或1带入上面公式,整理后得: 
n0=(n+1)/2或者n0=n/2; 
看看n是否能被2整除,能则用n0=n/2。否则用n0=(n+1)/2 既叶子节点为n0=(n+1)/2=384 
例【2】:已知完全二叉树的结点有700个,求其叶子结点的个数?  解析:   
完全二叉树,要求是除了最下面一层节点和部分倒数第二层节点外,所有节点均是满树。 
     因此我们可以得到以下满树的规律:

第一层:根节点 1个,即2^0个      第二层:两个,即:2^1个      第三层:4个,即:2^2个       ....  
    也就是说,n层满树的节点个数是:        2^0+2^1+2^2+...+2^(n-1)=2^n-1  
   所以:700个节点的完全二叉树最多10层     即第1-9层是满树,共有:511个节点  
   也就是说:第十层还有:700-511=189个节点,这些节点全叶子节点     于是完全二叉树,最后一层最多有一个节点不满,     所以第9层左边的95个节点是非叶子节点,     因此第九层有:256-95=161个有叶子节点     第十层有:189个叶子节点  
   因此共有:189+161=350个叶子节点

时间: 2024-12-25 18:01:05

树的计算的相关文章

有符号数、无符号树混合计算问题。

今天在线刷题,其中一个问题总是结果跟期望的不一样,在一次次的检查程序逻辑.确认无误后,还是不能通过,不得已用VS开始调试! 这里是我的程序代码: 1 // maxDepth.cpp : 定义控制台应用程序的入口点. 2 // 3 4 #include "stdafx.h" 5 #include<vector> 6 #include<iostream> 7 #include<limits.h> 8 9 using namespace std; 10 1

建算数表达式树并计算(应付作业,仅供参考)

只是为了应付数据结构老师布置的作业,算式里的数只能是整数: 例如输入 (6+3)*(4-2)*(41-1) 输出 720.00 #include <stdio.h> #include <string.h> const int N = 1000; int m[N], flag; double res; struct Node { double val; char c; Node* left; Node* right; Node() { left = right = NULL; c =

构建树并计算算术表达式(为了应付该作业,仅供参考)

只是应付数据结构老师分配.式中的号码只能是一个整数: 例如,输入 (6+3)*(4-2)*(41-1) 出口 720.00 #include <stdio.h> #include <string.h> const int N = 1000; int m[N], flag; double res; struct Node { double val; char c; Node* left; Node* right; Node() { left = right = NULL; c = '

康复计划#4 快速构造支配树的Lengauer-Tarjan算法

本篇口胡写给我自己这样的老是证错东西的口胡选手 以及那些想学支配树,又不想啃论文原文的人- 大概会讲的东西是求支配树时需要用到的一些性质,以及构造支配树的算法实现- 最后讲一下把只有路径压缩的并查集卡到$O(m \log n)$上界的办法作为小彩蛋- 1.基本介绍 支配树 DominatorTree 对于一个流程图(单源有向图)上的每个点$w$,都存在点$d$满足去掉$d$之后起点无法到达$w$,我们称作$d$支配$w$,$d$是$w$的一个支配点. 支配$w$的点可以有多个,但是至少会有一个.

树和二叉树-第6章-《数据结构题集》习题解析-严蔚敏吴伟民版

习题集解析部分 第6章 树和二叉树 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       相关测试数据下载  链接? 数据包       本习题文档的存放目录:数据结构\▼配套习题解析\▼06 树和二叉树  

poj2513Colored Sticks(欧拉通路+字典树+并查集)

Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sticks in a straight line such that the colors of the endpoints that touch are of the same color? Input Input is a

C++实现树的基本操作,界面友好,操作方便,运行流畅,运用模板

Ⅰ.说明: 1.采用左孩子右兄弟的方式,转化为二叉树来实现. 2.树的后根遍历与二叉树的中根遍历即有联系又有区别,请读者注意分析体会. Ⅱ.功能: 1.创建树并写入数据 2.先根遍历树 3.计算树高 4.后根遍历树 5.层次遍历树 6.搜索数据域为某值的结点 7.删除数据域为某值的结点及其子树 8.销毁树 Ⅲ.代码: //.h文件 #ifndef TREE_H #define TREE_H #include<iostream> #include<iomanip> using nam

【HDU 1542】Atlantis 矩形面积并(线段树,扫描法)

[题目] Atlantis Problem Description There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describe different regions of

5.HCNP-R&amp;S-IERN——计算OSPF区域内路由

本次介绍OSPF如何计算区域内路由.内容包括如何使用Router-LSA和Network-LSA表示链路状态信息,以及如何计算最短路径树等. 学习目标: 1. 理解Router-LSA 2. 理解Network-LSA 3. 理解最短路径树的计算 LSDB通过描述一个有向线段图来描述网络拓扑结构,该有向图的端点有三种类型:路由器节点,Stub网段和Transit网段. Stub网段表示该网段只有数据入口,例如一个Loopback接口就是一个Stub网段. Cost表示从一个端点到另一个端点的开销