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

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

一、递归的介绍

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

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

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

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

二、递归算法的妙用

2.1 二叉树结点个数

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

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

2.2 二叉树叶子结点个数

📚 代码演示:

// 二叉树叶子结点个数
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给改变了

📚 代码演示:

// 二叉树第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的节点首先我们需要判断 跟为空的情况再来对他的左右子树进行递归查找:

  • 这里要注意的是递归返回的值是上一层的值,一旦不进行接收那么返回值就会出现问题
// 二叉树查找值为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语句啦!

看到这里了还不给博主扣个:
⛳️ 点赞🍹收藏 ⭐️ 关注

💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖

拜托拜托这个真的很重要!

你们的点赞就是博主更新最大的动力!

有问题可以评论或者私信呢秒回哦。

目录
相关文章
|
1月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
26 0
|
3月前
|
前端开发 JavaScript 数据格式
使用递归写树形结构
使用递归写树形结构
13 0
|
5月前
|
算法
数据结构和算法学习记录——层序遍历(层次遍历)、二叉树遍历的应用(输出二叉树中的叶节点、求二叉树的高度、二元运算表达式树及其遍历、由两种遍历序列确定二叉树)
数据结构和算法学习记录——层序遍历(层次遍历)、二叉树遍历的应用(输出二叉树中的叶节点、求二叉树的高度、二元运算表达式树及其遍历、由两种遍历序列确定二叉树)
51 0
|
6月前
|
存储
二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
58 1
|
存储
二叉树相关问题细谈递归(上)
二叉树相关问题细谈递归
70 0
二叉树相关问题细谈递归(下)
二叉树相关问题细谈递归(下)
63 0
|
存储
【二叉树】——链式结构(快速掌握递归与刷题技巧)
【二叉树】——链式结构(快速掌握递归与刷题技巧)
134 0
|
Java
java实现树的前序遍历,递归和非递归实现(简单明了)
java实现树的前序遍历,递归和非递归实现(简单明了)
105 0
数组转树形结构(递归)
大家好,今天我将向大家分享一下数组转树形结构的方法——递归方法。