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

基础知识:

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所以第十层的叶子结点数是700-511=189个;现在来算第九层的叶子结点个数。由于第十层的叶子结点是从第九层延伸的,所以应该去掉第九层中还有子树的结点。因为第十层有189个,所以应该去掉第九层中的(189+1)/2=95个;所以,第九层的叶子结点个数是256-95=161,加上第十层有189个,最后结果是350个。

一个有 800 个结点的完全二叉树,问有_____个叶子结点?

答案:400

时间: 2024-08-03 19:41:53

计算二叉树中叶子结点个数的方法的相关文章

PTA 统计二叉树叶子结点个数

6-2 统计二叉树叶子结点个数 (10 分) 本题要求实现一个函数,可统计二叉树的叶子结点个数. 函数接口定义: int LeafCount ( BiTree T); T是二叉树树根指针,函数LeafCount返回二叉树中叶子结点个数,若树为空,则返回0. 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiTNode { ElemType data; st

二叉树的操作之统计二叉树中节点的个数

一,问题描述 给定一颗二叉树,已知其根结点. ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数 二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现. ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结点,计数增1.因此,可使用类似于先序遍历的思路来实现,代码如下: //计算树中节点个数 private int nubmer

创建二叉树求叶子节点个数

求二叉树叶子结点的个数,注意创建方法! //求二叉树中叶子结点的个数 #include<iostream> #define N 63 using namespace std; char str[] = "ab#d##c#e##"; //先建立根节点,然后再左右结点建立 int i = -1; typedef struct node { struct node *leftChild; struct node *rightChild; char data; }BiTreeNod

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

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

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同

//叶子节点的个数 /* (1)如果二叉树为空,返回0 (2)如果二叉树不为空且左右子树为空,返回1 (3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数 */ int GetLeafNodeNum(BTree* root) { if(root == NULL) return 0; if(root->m_pLeft == NULL && root->m_pRight == NULL) return 1; int LeafNumOfLef

求二叉树中叶子节点的个数

求二叉树中叶子节点的个数 面试题二叉树 题目描述 求二叉树中叶子节点的个数. 叶子节点的定义:如果一个节点既没有左孩子,也没有右孩子,则该节点为叶子节点. 示例: 3 / 9 20 / 15 7 在这个二叉树中,叶子节点有 9,15,7,所以返回 3. Java 实现 class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } class Solution { public int

交换二叉树中所有结点的左右子树的位置

#include<stdlib.h> #include<stdio.h> #include<stack> #define N 50 using namespace std; typedef struct tree{ char ch; struct tree *lchild; struct tree *rchild; }BitTree; //数组输入 BitTree *CreateTree(int A[], int i, int n){ BitTree *bt; if(i

先序遍历创建二叉树,对二叉树统计叶子节点个数和统计深度(创建二叉树时#代表空树,序列不能有误)

#include "stdio.h" #include "string.h" #include "malloc.h" #define NULL 0 #define MAXSIZE 30 typedef struct BiTNode      //定义二叉树数据结构 { char data; struct BiTNode *lchild,*rchild; } BiTNode; void preCreate(BiTNode *& T)   /