当前位置: 首页 > news >正文

数据结构 | c++编程实现求二叉树的叶节点的个数。(递归非递归)

目录

非递归

递归


非递归

#include<iostream>
#include<stack>
using namespace std;
struct BTNode
{int data;BTNode* left, * right;BTNode(int val) :data(val), left(NULL), right(NULL) {}};
//递归的方式求二叉树的叶子结点数
int  countnode(BTNode* t)  //采用int类型而非bool类型 bool类型最后只有0和1
{if (t == NULL)return 0;stack<BTNode*>s1, s2; //两个栈一个存放临时节点,一个存放应经找到的叶子结点s1.push(t);  //将根节点放入栈中bool flag = false;  //用来标识有无叶子结点while (!s1.empty()){BTNode* node = s1.top();//取栈顶元素s1.pop();if (node->left == NULL && node->right == NULL){s2.push(node);flag = true; //有叶子结点 标识变true}else{if (node->left != NULL) //根节点的哪边不为空就把它塞到s1这个栈里面 {s1.push(node->left);}if (node->right != NULL){s1.push(node->right);}}}int count = 0;while (!s2.empty()){count++;s2.pop();}return flag ? count : 0;
}
int main()
{BTNode* root = new BTNode(1);root->left = new BTNode(2);root->right = new BTNode(3);root->left->left = new BTNode(4);root->left->right = new BTNode(5);root->right->left = new BTNode(6);root->right->right = new BTNode(7);cout << "叶子结点个数:" << countnode(root) << endl;return 0;
}

递归

#include<iostream>
#include<stack>
using namespace std;
struct BTNode
{int data;BTNode* left, * right;BTNode(int val):data(val),left(NULL),right(NULL){}};
//递归的方式求二叉树的叶子结点数int  countnode( BTNode* t)  //采用int类型而非bool类型 bool类型最后只有0和1
{if (t == NULL)return 0;if (t->left == NULL && t->right == NULL){return 1;}return (countnode(t->left) + countnode(t->right));  //递归调用函数求解根节点左孩子的叶子结点和右孩子的叶子结点
}
int main()
{BTNode* root = new BTNode(1);root->left = new BTNode(2);root->right = new BTNode(3);root->left->left = new BTNode(4);root->left->right = new BTNode(5);root->right->left = new BTNode(6);root->right->right = new BTNode(7);cout << "叶子结点个数:" << countnode(root) << endl;return 0;
}

http://www.lryc.cn/news/260491.html

相关文章:

  • python读取csv文件
  • 租一台服务器多少钱决定服务器的价格因素有哪些
  • 深度学习(生成式模型)——ADM:Diffusion Models Beat GANs on Image Synthesis
  • Ubuntu无法解析域名DNS指向127.0.0.53问题处理
  • Intewell-Hyper I_V2.0.0_release版本正式发布
  • Mysql mybatis 语法示例
  • 第77讲:二进制方式搭建MySQL数据库5.7版本以及错误日志管理
  • R语言,table()函数实现统计每个元素出现的频数+并将最终统计频数结果转换成dataframe数据框形式
  • 微信小程序uniapp记住密码
  • 喜报!Coremail荣获2023信创“大比武”优秀生态融合奖
  • 知识库SEO:提升网站内容质量与搜索引擎排名的策略
  • GPIO复用时5个调试接口引脚要注意
  • 华为云CodeArts Check常见问答汇总
  • linux 应用开发笔记---【信号:基础】
  • 区块链:改变世界的技术
  • 防御升级!SMC2助力企业高效应对邮箱安全挑战
  • 19.(vue3.x+vite)v-if和v-for哪个优先级更高
  • 12. IO
  • 【稳定检索|投稿优惠】2024年艺术鉴赏与社会科学教育国际会议(ICAASSE 2024)
  • leetCode算法—3.无重复字符的最长子串
  • STM32 寄存器配置笔记——USART DMA接收
  • (基础篇)通过node增删改查连接mysql数据库
  • 做为一个产品经理带你详细了解--动态面板的使用
  • 严世芸龟法养生经
  • 基于OHTPPS实现网站HTTPS访问
  • python|获取接口请求耗时
  • [PyTorch][chapter 7][李宏毅深度学习][深度学习简介]
  • 【go语言实践一】go语言基础篇一
  • 深度学习 Day12——P1实现mnist手写数字识别
  • 【Docker实战】基于Dockerfile搭建LNMP+wordpress