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

【数据结构】二叉树——深度,节点个数,叶子节点个数

二叉树

  • 一、求二叉树的深度
  • 二、二叉树节点个数
  • 三、二叉树叶子节点个数

在这里插入图片描述
本文都以此数为例子

一、求二叉树的深度

我们若要求二叉树的深度,还是用递归来解决问题
我们采取的思路是,遍历二叉树若不为空就加 1
将一个节点的左右两节点遍历后对左右两节点深度进行比较,选取大的返回

//二叉树深度
int BTLevelDepth(BTNode* php)
{
	if (php == NULL)
	{
		return 0;
	}
	int left = BTLevelDepth(php->left);
	int right = BTLevelDepth(php->right);
	return left > right ? left + 1 : right + 1;
}

在代码中我们用 left 和 right 将左右两节点的深度进行保存
而不是在 return 中递归

return BTLevelDepth(php->left) > BTLevelDepth(php->right) ?
	BTLevelDepth(php->left) + 1 : BTLevelDepth(php->right) + 1;

因为如果我们不将左右保存下来,等进行比较时要递归一次,在选取大的返回时又要递归一次就会多出很多递归次数,使程序运行效率下降

二、二叉树节点个数

我们若要求二叉树节点的个数
我们采取的思路是,遍历二叉树
若不为空我们返回时加 1 ,
为空返回 0
返回值为左右两子树递归再加1

//二叉树节点个数
int BTSize(BTNode* pbt)
{
	if (pbt == NULL)
	{
		return 0;
	}

	return BTSize(pbt->left) + BTSize(pbt->right) + 1;
}

三、二叉树叶子节点个数

我们若要求二叉树叶子节点的个数
我们遍历二叉树
若遇到一个节点,其左右两节点都为空,我们就返回 1
返回值为左右两子树递归相加

// 二叉树叶子节点个数
int BTLeafSize(BTNode* php)
{
	if (php == NULL)
	{
		return 0;
	}
	if (php->left == NULL && php->right == NULL)
	{
		return 1;
	}

	return BTLeafSize(php->left) + BTLeafSize(php->right);
}

http://www.kler.cn/a/378457.html

相关文章:

  • SpringKafka生产者、消费者消息拦截
  • Qt中的Model与View 2
  • ELK的ElasticStack语法
  • IDEA - 快速去除 mapper.xml 黄色警告线和背景色----简化版
  • Three.js简化 WebGL 的使用
  • SQLite 语法
  • ES索引:索引管理
  • Lucene的概述与应用场景(1)
  • JS面试八股文(四)
  • Java 使用Maven Surefire插件批量运行单元测试
  • 数据结构模拟题[九]
  • 使用DJL和PaddlePaddle的口罩检测详细指南
  • AI读教链文章《微策略的金融永动机 —— 十年之约#34(ROI 53%)》
  • HTML 基础标签——结构化标签<html>、<head>、<body>
  • unity3d————游戏对象随机位置移动
  • 力扣每日一题 3211. 生成不含相邻零的二进制字符串
  • 使用Conda环境为Jupyter添加内核
  • [HTML]-基础标记:列表/标题/引用/表格/嵌入网页/图片/视频等
  • 力扣题目解析--罗马数字转整型
  • 一次明白——Vue.js组件开发!
  • Kubernetes运行大数据组件-运行spark
  • element plus中修改el-table的样式
  • JAVA语言多态和动态语言实现原理
  • 深度学习:反向传播算法简介
  • 一体化运维监控管理平台详解:构建高效运维体系
  • 如何通过OpenAI Gym学习强化学习