二叉树叶子节点的个数和第k层的节点个数——题集八

求二叉树叶子节点的个数 && 求第K层的节点个数 求二叉树叶子节点的个数 思路: 1.如果根节点为NULL时,则是空树,返回0; 2.根节点不为空时,如果根节点的左右子树均为空,则该二叉树中只有一个节点,即返回1; 3.叶子节点的个数=左子树叶子节点数+右子树叶子节点数; int _GetNodeyezi(Node* root) //叶子节点的个数 { if (root == NULL) { return 0; 阅读详情

二叉树叶子节点的个数和第k层的节点个数——题集八

       今天,博主没懒丢,所以来分享一下二叉树叶子节点的个数和第k层的节点个数,求数组中数字次数超过数组一半的字符。

       求二叉树叶子节点的个数的源程序和运行用例。

源代码如下:

#include<iostream>
using namespace std;
#include<stack>
 
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x)
:val(x)
,left(NULL)
,right(NULL)
{
    }
};
 
//二叉树叶子节点的个数
int Leafnum(TreeNode* root){//二叉树叶子节点的个数
//前序遍历——循环
int num=0;
if(root == NULL)return num;
stack<TreeNode*> tmp;
tmp.push(root);
TreeNode* cur;
 
while(!tmp.empty()){
cur=tmp.top();
 
while(cur->left  != NULL){
cur=cur->left;
tmp.push(cur);
}
 
tmp.pop();
while(cur->right == NULL){
if(cur->left  == NULL){
num++;
}
if(tmp.empty()) return num;
cur=tmp.top();
tmp.pop();
}
cur=cur->right;
tmp.push(cur);
}
return num;
}
 
void Testtreeleft(){//二叉树叶子节点的个数
TreeNode pRoot1(1);
TreeNode pRoot2(2);
TreeNode pRoot3(3);
TreeNode pRoot4(4);
TreeNode pRoot5(5);
TreeNode pRoot6(6);
TreeNode pRoot7(7);
TreeNode pRoot8(8);
pRoot1.left = &pRoot2;
pRoot1.right = &pRoot3;
pRoot2.left = &pRoot4;
pRoot2.right = &pRoot5;
pRoot3.left = &pRoot6;
pRoot3.right = &pRoot7;
pRoot4.left = &pRoot8;
 
cout<<"二叉树叶子节点的个数"<<endl;
cout<<"Leafnum(&pRoot1): "<<Leafnum(&pRoot1)<<endl;//二叉树叶子节点的个数
cout<<"Leafnum(&pRoot2): "<<Leafnum(&pRoot2)<<endl;
cout<<"Leafnum(&pRoot3): "<<Leafnum(&pRoot3)<<endl;
cout<<"Leafnum(&pRoot4): "<<Leafnum(&pRoot4)<<endl;
cout<<"Leafnum(&pRoot5): "<<Leafnum(&pRoot5)<<endl;
}
 
int main(){
Testtreeleft();//二叉树叶子节点的个数
system("pause");
return 0;
}

运行结果:

 

       求二叉树第k层的节点个数的源程序和运行用例。

源代码如下:

#include<iostream>
using namespace std;
#include<queue>
 
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x)
:val(x)
,left(NULL)
,right(NULL)
{
    }
};
 
//二叉树第k层的节点个数
int NodeKnum(TreeNode* root, int k){
int num=0;
if(k<=0 || root==NULL) return num;//层序遍历
++num;
if(k==1) return num;
queue<TreeNode*> tmp;
tmp.push(root);
int i=1;//层序
TreeNode* cur;
 
while(!tmp.empty()){
int count=0;
while(num-- >0){
cur=tmp.front();
tmp.pop();
 
if(cur->left != NULL){
tmp.push(cur->left);
++count;
}
if(cur->right != NULL){
++count;
tmp.push(cur->right);
}
}
num=count;
i++;
if(i==k) return num;
}
return 0;
}
 
void TesttreeKnum(){//二叉树第k层的节点个数
TreeNode pRoot1(1);
TreeNode pRoot2(2);
TreeNode pRoot3(3);
TreeNode pRoot4(4);
TreeNode pRoot5(5);
TreeNode pRoot6(6);
TreeNode pRoot7(7);
TreeNode pRoot8(8);
pRoot1.left = &pRoot2;
pRoot1.right = &pRoot3;
pRoot2.left = &pRoot4;
pRoot2.right = &pRoot5;
pRoot3.left = &pRoot6;
pRoot3.right = &pRoot7;
pRoot4.left = &pRoot8;
 
cout<<"二叉树第k层的节点个数"<<endl;
cout<<"NodeKnum(&pRoot1, 4): "<<NodeKnum(&pRoot1, 4)<<endl;//二叉树第k层的节点个数
cout<<"NodeKnum(&pRoot1, 3): "<<NodeKnum(&pRoot1, 3)<<endl;
cout<<"NodeKnum(&pRoot1, 2): "<<NodeKnum(&pRoot1, 2)<<endl;
cout<<"NodeKnum(&pRoot1, 1): "<<NodeKnum(&pRoot1, 1)<<endl;
cout<<"NodeKnum(&pRoot1, 0): "<<NodeKnum(&pRoot1, 0)<<endl;
}
 
int main(){
TesttreeKnum();//二叉树第k层的节点个数
system("pause");
return 0;
}

运行结果:

 

       一个数组中有一个数字的次数超过了数组的一半,求出这个字符,不存在输出*。

       如:int a[]={2,3,2,2,2,2,2,5,4,1,2,3},求出超过一半的数字是2。

       求数组中数字次数超过数组一半的字符的源程序和运行用例。

源代码如下:

#include<iostream>
using namespace std;
#include<map>
 
//求数组中数字次数超过数组一半的字符,不存在输出*。
char Halfnum(vector<char>* num){
char ch('*');
map<char, int> tmp;
int size=num->size();
 
for(int i=0; i<size; i++){
tmp[(*num)[i]]++;
}
 
map<char, int>::iterator it=tmp.begin();
while(it != tmp.end()){
if(it->second >(size/2)){
ch=it->first;
break;
}
++it;
}
return ch;
}
 
void printnum(vector<char>* num){
int size=num->size();
 
for(int i=0; i<size; i++){
cout<<(*num)[i]<<" ";
}
cout<<endl;
}
 
void TestHalfnum(){//求数组中数字次数超过数组一半的字符
vector<char> num;
num.push_back('2');
num.push_back('3');
num.push_back('2');
num.push_back('2');
num.push_back('5');
num.push_back('2');
 
cout<<"数组为:";
printnum(&num);
cout<<"求数组中数字次数超过数组一半的字符"<<endl;
cout<<"Halfnum(num): "<<Halfnum(&num)<<endl<<endl;//求数组中数字次数超过数组一半的字符,不存在输出*。
 
num.pop_back();
cout<<"数组为:";
printnum(&num);
cout<<"求数组中数字次数超过数组一半的字符"<<endl;
cout<<"Halfnum(num): "<<Halfnum(&num)<<endl<<endl;//求数组中数字次数超过数组一半的字符,不存在输出*。
 
num.pop_back();
num.pop_back();
cout<<"数组为:";
printnum(&num);
cout<<"求数组中数字次数超过数组一半的字符"<<endl;
cout<<"Halfnum(num): "<<Halfnum(&num)<<endl<<endl;//求数组中数字次数超过数组一半的字符,不存在输出*。
}
 
int main(){
TestHalfnum();//求数组中数字次数超过数组一半的字符
system("pause");
return 0;
}

运行结果:

 

     分享如上,如有错误,望斧正!愿大家学得开心,共同进步!

ps:上一篇昨天就写完,我为啥不发。。。

     懒~^v^,希望大家以我为鉴,不要,懒的,不,发,博客。T_T

二叉树相关(1计算节点个数,2计算叶子结点个数,3求二叉树高度,求K层结点个数,4找那个值所在节点的指针) 阅读详情

相关推荐

二叉树的节点个数以及高度详解(附图解)

本文介绍二叉树的节点个数以及高度以及各自的递归展开图!如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!

铭哥不写bug的博客 4751

求二叉树第K层的叶子节点的个数(假设根节点是第一层)

算法思想:采用队列结构按层次遍历,遍历K层时记录叶子的个数   int LeafKlevel(BiTree bt, int k){ //求二叉树bt的第k(k >1)层上叶子的节点个数 if(bt == NULL || k < 1) return 0; BiTree p=bt,Q[]; //Q是队列,元素是二叉树节点的指针 int

steven的专栏 3081

IEPE传感器4mA恒流源接口电路

另外传感器的偏置电压大概在10V多点,一般接个电容把直流分量去掉。这里我们要把恒流源的电流设置在4毫安左右,R1取33Ω差不多正好。经过CR的隔直流电路后的波形是这样的。

老白的博客 6115

【5 树与二叉树】二叉树k层叶子结点数。

【代码】【5 树与二叉树】二叉树k层叶子结点数。

irel1a_3的博客 652

uniapp+华为HBuilder X 4.29跑鸿蒙模拟器报错没有签名授权

uniapp+华为HBuilder X 4.29跑鸿蒙模拟器报错没有签名授权报错信息11:39:47.976 安装 .hap 到鸿蒙设备 ...11:39:48.517 运行所需的权限没有签名授权,请参考 配置文档11:39:48.517 安装失败。

weixin_66071584的博客 1350

别再怕无霍尔BLDC了!手把手教你用反电动势过零检测搞定电机换向(附STM32代码片段)

本文详细介绍了无霍尔传感器BLDC电机的驱动方法,重点讲解反电动势过零检测技术及其在STM32上的实现。通过硬件电路设计、信号调理和软件算法优化,手把手教你完成电机换向控制,并提供实用的调试技巧和代码片段,帮助开发者快速掌握无霍尔BLDC驱动技术。

weixin_42522575的博客 493

求链式二叉树第K层的结点数

之前我们写过怎么求叶子结点的个数,叶子结点个数就是求它的左子树的叶子结点,加上柚子树的叶子结点,依次递归下去,可能最难得就是跳出递归的条件,由于是求叶子结点,所以当它的左右子树都为空的时候就返回1,如果是空的树就返回零。同样的,我们要找K层的节点数,所以我们每遍历一层就k-1最后当k==1的时候,就到了第K层了,所以这就是我们的终止递归的条件。 #include<stdio.h> #include<stdlib.h> #include<assert.h> typede

m0_57330725的博客 1983

数电实验,如何安装Quartus II软件?

数电实验第一步,安装软件Quartus II! 安装这个软件可以说是很折磨我了,依然是failed很多次之后终于可以了! 能成功安装,多亏了网络上的各路大神!!!不胜感激 现在分享经验如下: ps:我分享的是Quartus II 14.0版本的软件及破解器安装使用方法 注意!想要在电脑上顺利安装,前提条件是电脑有10G以上内存!!! 友情提示:建议整个下载过程中,提前关掉所有杀毒、电脑

一个程序媛的成长记录❤ 3659

数据结构——考前查漏补缺

第一部分:查漏补缺 一:考点部分 二:加强记忆注意部分 第二部分:题型归纳 一:选择题 二:判断题 三:填空题 四:算法填空题 五:阅读算法 六:应用题 七:计算题 八:算法设计题/编写算法题 ...

刘鑫磊 1万+

全国排污许可证数据

from tkinter import * # 导入窗口控件 import tkinter.filedialog import requests from lxml import etree from tkinter import ttk from bs4 import BeautifulSoup import webbrowser # 调用浏览器打开网页 from tkinter import messagebox # 弹出提示框 from openpyxl import Workbook imp.

Newnotes的博客 3387

ArcGIS Pro 3.4 二次开发 - 布局

本文介绍了在ArcGIS Pro SDK 3.4和.NET 8环境下操作布局工程项的相关方法。主要内容包括:引用布局工程项和关联布局,在新视图中打开或激活已有布局视图,引用活动布局视图,导入/移除布局工程项,创建基本布局或带参考线的自定义布局,修改布局页面尺寸,以及创建圆形图形元素等操作。重点演示了如何通过CIM(Core Infrastructure Model)进行高级布局配置,并详细说明了圆形图形元素的创建过程,包括几何构建、符号设置和图形生成。所有涉及UI线程的操作都遵循ArcGIS Pro SDK

Winemonk 795

二叉树第k层的叶子节点数

不论是“求二叉树第k层的节点数”还是“求二叉树第k层的叶子节点数”,算法思想都是二叉树的层序遍历,在前面几篇博文中已经多次讲述,此处就不再赘述了。求二叉树第k层的叶子节点数,同样有递归方法和非递归方法,本文仅讲述递归方法,非递归方法可以参考前面几篇博文来实现。说明:根节点位于0层,每层中的第一个节点的下标为0。具体实现如下:#include <iostream> using namespace st

小僧Coding 6840

【020】C++ 动态内存管理解析:new 和 delete 的正确使用

C++中的动态内存分配是在程序运行时根据需要进行内存空间的分配和释放,与静态内存分配相比,具有更大的灵活性和适应性。动态内存分配可以通过new和delete或者malloc()和free()等函数实现。在程序运行时无法确定所需的内存大小。需要在多个函数之间共享数据,并且数据可能被频繁地创建和销毁。静态数组无法满足需求,例如需要支持可变长度数组。如果在动态分配内存后忘记了释放它,则会导致内存泄漏。为避免内存泄漏,可以使用智能指针或手动管理内存的方式来释放动态分配的内存。

Lion_Long的博客 1470

二叉树叶子结点个数和第K层结点的个数

求二叉树叶子结点的个数        1.如果根节点为NULL时,则是空树,返回0;        2.根节点不为空时,如果根节点的左右子树均为空,则该二叉树中只有一个节点,即返回1;        3.叶子节点的个数=左子树叶子节点数+右子树叶子节点数; 代码如下: int _GetNodeyezi(Node* root) //叶子节点的个数 {

HelloKTT的博客 1625

水文仿真软件:HEC-RAS (Hydrologic Engineering Center‘s River Analysis System)_(7).一维非稳态水力模型

自定义脚本是通过编程语言(如 Python)编写的一系列自动化任务,可以帮助用户更高效地处理数据和运行模型。编写脚本:使用 Python 或其他编程语言编写自定义脚本。集成脚本:将脚本集成到 HEC-RAS 中,实现自动化数据处理和模型运行。

kkchenjj的博客 933

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

六:二叉树中第k层节点个数与二叉树叶子节点个数

二叉树中第k层节点个数 递归解法: (1)如果二叉树为空或者k<1返回0 (2)如果二叉树不为空并且k==1,返回1 (3)如果二叉树不为空且k>1,返回左子树中k-1层的节点个数与右子树k-1层节点个数之和 二叉树叶子节点个数 递归方式 (1)如果给定节点pRoot为NULL,则是空树,叶子节点为0,返回0; (2)如果给定节点pRoot左右子树均为NULL,则是叶子节点,且叶子节点数为1,返回1; (3)如果给定节点pRoot左右子树不都为NULL,则不是叶子节点,以pRoot为根节点的子树叶子节点数

day__day__up的博客 2140

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

二叉树结点个数、叶子节点个数、第K层节点数、高度

其实解决二叉树有关的问题少不了要用递归,我们在用递归的时候要想想树的五种形式是否都满足,以确定终止条件即可。 求二叉树的结点个数 空树返回0,其他返回左子树节点数+右子树节点数+1 //求二叉树的结点个数 int GetSize(BNode *root) { if (root == NULL) { return 0; } return GetSize(root-&amp;gt;left...

L_R 2753

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

二叉树--求二叉树叶子节点的个数/求二叉树第k层的节点个数。

求二叉树叶子节点的个数思路:左子树的叶子节点的个数+右子树叶子节点的个数int GetLeefNode(BinaryTreeNode<T>* pRoot) { if(pRoot == NULL) return 0; if(pRoot -> left == NULL && pRoot -> right == NULL) return 1;

sayhello_world的博客 1137

【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法

二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法

luhaoran814的博客 4547

二叉树求节点个数及高度问题【图文详解】

本文讲解如何求二叉树结点个数,二叉树叶子节点个数,二叉树第K层结点个数,二叉树的高度(深度),二叉树值为x的结点的方法及其思路。

LiU11e的博客 1907

求二叉树叶子节点的个数+求二叉树第k层的节点个数

求二叉树叶子节点的个数、求二叉树第k层的节点个数: //二叉树的高度 size_t Height() { return _Height(_pRoot); } //访问叶子结点 size_t GetLeafNode() { return _GetLeafNode(_pRoot); } //求某一层的结点个数 size_t GetKLevelNode(size

SUXIAONI_的博客 546

每日一题之二叉树叶子节点的个数及第K层节点的个数

1,求二叉树叶子结点的个数。 分析思想: (1)如果这个树为空,则没有节点,结点数为0. (2)如果这个数只有一个根节点,它的左右子树都为空,则结点数为0. (3)如果这个数有根节点并且它的左右子树不为空,则节点数等于左子树的结点数加上右子树的结点数。 实现代码: #define _CRT_SECURE_NO_WARNINGS #include using namespace std;

flybeatles的博客 787

求二叉树叶子节点的个数和第k层的节点个数【每日一题】

1.求二叉树中叶子节点的个数 (1)如果二叉树为空,返回0 ; (2)如果二叉树不为空且左右子树为空,返回1; (3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数 。 2.求二叉树中第k层的节点个数 (1)若树为空或k小于1或k大于树的高度,则返回0; (2)若k=1,则表示第一层即为根节点个数,即返回1; (3)如果不是上两种情况,则返

985136449的博客 801

求二叉树叶子节点的个数/求二叉树第k层的节点个数。

题目:求二叉树叶子节点的个数/求二叉树第k层的节点个数。 这两个题的方法是一样的,用递归就可以求解 1.叶子节点: 1)当前节点为NULL,返回0 2)没有左右孩子,返回1 3)否则返回左孩子的叶子节点个数加上右孩子的叶子节点个数 size_t BinaryTree::_GetLeefNode(Node* pRoot) { if (NULL == pRoot) return 0;

element137的博客 1274

java-求二叉树节点个数 / 叶子节点个数 / 第k层节点个数

public static int size(Node root) { //求二叉树中节点的个数 //使用先序遍历的方式 if (root == null) { return 0; } //体会递归"拆分问题的过程 //整个树节点个数=根节点的个数(1)+左子树的个数+右子树的个数 return 1+size(root.left)+size(root.ri...

weixin_42440457的博客 3237

求二叉树叶子节点的个数/求二叉树第k层的节点个数

int FindLeavesOfBinaryTree(BinaryTreeNode* pRoot) //求二叉树叶子结点的个数 { if (pRoot == NULL) return 0; if (pRoot->_pLeft == NULL && pRoot->_pRight == NULL) return 1; return FindLeaves

dcjhyn的博客 1101
上一篇: 二叉树的层序遍历——题集(七)
下一篇: 求二叉树的高度和销毁一颗二叉树——题集九
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值