数据结构 | 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;
}

相关推荐

  1. 数据结构 | 遍历(&

    2023-12-15 13:44:03       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-15 13:44:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-15 13:44:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-15 13:44:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-15 13:44:03       20 阅读

热门阅读

  1. 什么是数据分析?

    2023-12-15 13:44:03       37 阅读
  2. Python实现图像批量png格式转为npy格式

    2023-12-15 13:44:03       36 阅读
  3. 【ubuntu】Linux常用截屏软件

    2023-12-15 13:44:03       41 阅读
  4. C++学习-2023/12/13-C++类型转换

    2023-12-15 13:44:03       32 阅读
  5. Centos系统上nginx安装

    2023-12-15 13:44:03       27 阅读
  6. 设计类的时候面向对象遵循的原则 SOLID

    2023-12-15 13:44:03       39 阅读
  7. 8位LED流水灯设计

    2023-12-15 13:44:03       39 阅读
  8. QT文件介绍

    2023-12-15 13:44:03       37 阅读
  9. Golang 切片相关笔记

    2023-12-15 13:44:03       35 阅读
  10. GPT-4:背景、技术特点、发展、应用与前景

    2023-12-15 13:44:03       43 阅读
  11. 用服务器搭建网站需要做什么

    2023-12-15 13:44:03       37 阅读