(7)计算二叉树的高度和结点数——3

通过使用后序遍历的方式计算二叉树的高度。可以先计算左子树的高度h1,后计算右子树的高度h2,树的高度h3。

h3 = max (h1, h2) + 1 ;

二叉树的高度,也就是从根结点出发一直到叶结点的路径的长度。

因为在每种遍历方法中对每个结点都仅访问一次,所以可以在进行遍历时对结点的数目进行计算。

——整理自《C/C++程序员面试宝典》

时间: 2024-12-15 02:02:10

(7)计算二叉树的高度和结点数——3的相关文章

递归遍历 二叉树 求高度 和 节点数 和 叶子节点数

#include <iostream> #include <cstdio> #include<algorithm> #include<cstdlib> using namespace std; struct Node { char data; Node *lchild; Node *rchild; }; int nodes(Node *T) { if(T==NULL) return 0; else if(T->lchild==NULL&&

求二叉树的高度,叶子节点个数,第K层结点个数,求祖先结点问题

一.求二叉树的高度 类似归并排序的思想.先求最底层结点的高度,再分别比较生成更高的结点的高度.最后递归至根结点,求出根结点的高度. //求二叉树的高度 int Height() { return GetHeight(_root); } int GetHeight(Node<T> *root) { int left = 0; int right = 0; if (root->_leftchild != NULL) left += GetHeight(root->_leftchild)

计算二叉树的深度,结点的个数。

//算法5.5 计算二叉树的深度,结点的个数. #include<iostream> using namespace std; //二叉树的二叉链表存储表示 typedef struct BiNode { char data; //结点数据域 struct BiNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree; //用算法5.3建立二叉链表 void CreateBiTree(BiTree &T) { //按先序次序输入二叉树中结点的值(一

计算二叉树中叶子结点个数的方法

基础知识: 1.二叉树第i层最多有2^(i-1)个结点. 2.深度为k的二叉树至多有2^k-1个结点. 一个完全二叉树有七百个结点,问该二叉树有多少个叶子结点 根据“二叉树的第i层至多有2^(i − 1)个结点:深度为k的二叉树至多有2^k − 1个结点(根结点的深度为1)”这个性质:因为2^9-1 < 700 < 2^10-1 ,所以这个完全二叉树的深度是10,前9层是一个满二叉树,这样的话,前九层的结点就有2^9-1=511个:而第九层的结点数是2^(9-1)=256所以第十层的叶子结点数

树的度和结点数的关系

一.概念 与图论中的“度”不同,树的度是如下定义的:有根树T中,结点x的子女数目称为x的度.也就是:在树中,结点有几个分叉,度就是几. 一个有用的小公式:树中结点数 = 总分叉数 +1.(这里的分叉数就是所有结点的度之和) 二.度的计算 1.设树T的度为4,其中度为1,2,3,4的节点个数分别为4,2,1,1,则T中的叶子数为? 解: 叶子的度数为0:那么设叶子数为x,则此树的总分叉数为1*4+2*2+3*1+4*1=15:此树的节点个数为16(此处涉及到一个公式;节点数=分叉数+1,由图形便可

5.3.5 计算二叉树最大的宽度

方法一:利用遍历 #include<iostream> #include<cstdlib> #include<cstdio> using namespace std; typedef char TElemType; //二叉树的二叉链表存储表示 typedef struct BiNode { TElemType data; //结点数据域 struct BiNode *lchild, *rchild; //左右孩子指针 } BiTNode, *BiTree; void

NOJ1019-计算二叉树的高度和结点数

输入 二叉树的先序遍历序列,用#代表空树或空子树. 输出 共五行 前三行依次输出先序.中序和后序遍历序列, 第四行输出二叉树的高度, 第五行依次输出二叉树总结点数目.叶子结点数目.度为1的结点数目. 样例输入 A B # D # # C E # # F # # 样例输出 PreOrder: A B D C E FInOrder: B D A E C FPostOrder: D B E F C A36 3 1 题目很简单,基本的二叉树操作.需要注意的是输入结点之间有空格,而且输出结点时也有空格,行

iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示

一.上拉下拉注意事项 使用MJRefresh中的上拉控件自动设置透明 当请求下页数据通过page的时候,注意的是上拉加载更多数据失败的问题,下拉加载数据失败了,页数应该还原.或者是请求成功的时候再将页数修改 二.帖子中的日期显示问题(操作日期的两个类的使用) 期望达到的效果:如图 <1>NSDate -- 需要通过NSDateFormatter(日期格式类)将日期转换成相同的格式,才能相互运算,计算出来的时间间隔是以秒数来呈现的. <2>NSCalendar(日历类) -- 通过当

输入N组父子对,求父子对所组成的二叉树的高度----17年某公司的笔试题

题目的大致意思如下: 输入N组数,一组数代表一个父子对(如,0 1,0代表父节点,1代表子节点),求这N组数所组成的二叉树的高度: 例如: 输入:6  0 1  0 2  1 3  1 4  2 5  3 6 输出:4 解题思路:两种方法,动态规划和回溯法 一.动态规划法:使用一个数组hight[N]记录每组数所能组成的二叉树的高度,初始化为全1数组,使用一个数组visited[N]来记录每组数的访问情况,找出最优子结构: 当visited[i]=0时,visited[i]=1,hight[i]