前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >落叶归根:递归思想在二叉树叶子节点类问题中的妙用

落叶归根:递归思想在二叉树叶子节点类问题中的妙用

作者头像
鸽芷咕
发布2023-12-25 15:17:56
790
发布2023-12-25 15:17:56
举报
文章被收录于专栏:C++干货基地C++干货基地
在这里插入图片描述
在这里插入图片描述

🎬 鸽芷咕个人主页 🔥 个人专栏: 《linux深造日志》 《高效算法》

⛺️生活的理想,就是为了理想的生活!


文章目录
  • 一、递归的介绍
  • 二、递归算法的妙用
    • 2.1 二叉树结点个数
    • 2.2 二叉树叶子结点个数
    • 2.3 二叉树第k层结点个数
    • 2.4 二叉树查找值为x的结点
  • 📝文章结语:

一、递归的介绍

递归算法的理解一直都是是比较抽象的,但不可否认他是一个高效且简单的算法。几行代码就可以解决递归一些复杂的思想:

  • 其思想就是通过一个大问题分解成更小、相似的子问题
  • 来进行重复调用去解决复杂的大问题

而递归算法在使用的时候一定要注意好,递归的结束条件和递归的基本条件

  1. 一但结束条件没控制到就会发生死递归这类的程序错误
  2. 而基本递归情况是一个中最关键的部分,否则就会出现栈溢出等情况

二、递归算法的妙用

2.1 二叉树结点个数

哦豁,是不是没想到一行代码就解决了求二叉树结点个数的问题。哈哈哈递归算法就是如此的简单

  • 大问题转换为小问题
  • 递归结束条件
代码语言:javascript
复制
// 二叉树结点个数
int BinaryTreeSize(BTNode* root)
{
	return root == NULL ? 0 : 1 + BinaryTreeSize(root->left) + BinaryTreeSize(root->right);
}

2.2 二叉树叶子结点个数

📚 代码演示:

代码语言:javascript
复制
// 二叉树叶子结点个数
int BinaryTreeLeafSize(BTNode* root)
{
	if (root == NULL)
		return 0;

	if (root->left == NULL && root->right == NULL)
	{
		return 1;
	}

	return BinaryTreeLeafSize(root->left) + BinaryTreeLeafSize(root->right);
}

2.3 二叉树第k层结点个数

第k层结点个数,这个就有点难度了,不过其实还好因为他们给我了我们节点的层数当我们递归一次的时候:

  • 节点进行-1,来表示我们当前的层数当他为1时就递归到我们需要的层数了
  • 🔥 注:一定要注意好不要 自减 这样就把原本的k给改变了

📚 代码演示:

代码语言:javascript
复制
// 二叉树第k层结点个数
int BinaryTreeLevelKSize(BTNode* root, int k)
{
	if (root == NULL)
	{
		return 0;
	}

	if (k == 1 && root != NULL)
	{
		return 1;
	}

	return BinaryTreeLevelKSize(root->left, k-1 ) + BinaryTreeLevelKSize(root->right, k-1);
}

2.4 二叉树查找值为x的结点

查找值为x的节点首先我们需要判断 跟为空的情况再来对他的左右子树进行递归查找:

  • 这里要注意的是递归返回的值是上一层的值,一旦不进行接收那么返回值就会出现问题
代码语言:javascript
复制
// 二叉树查找值为x的结点
BTNode* BinaryTreeFind(BTNode* root, BTDataType x)
{
	if (root == NULL)
		return NULL;

	if (root->data == x)
	{
		return root;
	}

	BTNode* find = NULL;
	find = BinaryTreeFind(root->left, x);
	if (find)
		return find;

	find = BinaryTreeFind(root->right, x);
	if (find)
		return find;

	return NULL;
}

📝文章结语:

☁️ 把本章的内容全部掌握,铁汁们就可以熟练应用switch语句啦! 看到这里了还不给博主扣个: ⛳️ 点赞🍹收藏 ⭐️ 关注 💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖 拜托拜托这个真的很重要! 你们的点赞就是博主更新最大的动力! 有问题可以评论或者私信呢秒回哦。

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、递归的介绍
  • 二、递归算法的妙用
    • 2.1 二叉树结点个数
      • 2.2 二叉树叶子结点个数
        • 2.3 二叉树第k层结点个数
          • 2.4 二叉树查找值为x的结点
          • 📝文章结语:
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档