初阶数据结构 二叉树常用函数 (二)

简介: 初阶数据结构 二叉树常用函数 (二)

函数一 求二叉树叶节点的个数


这里要求我们统计叶节点的个数


我们想想 怎么统计呢?


还是老规矩 先上图


50868e0d566c4eda91bc6784d9695831.png


首先我们怎么判断叶节点呢?


如果这个节点它的左孩子和右孩子都是空指针


那么它就是一个叶节点


所以说当我们遇到左右节点都是空的时候返回一个一


核心代码表示如下


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);
}


接下来让我们测试下


75f24e5b105743bab4971d07fa3d142d.png


可以完美运行


我们来看看节点个数是不是4


5e06b7833bf9444d975f6712fe0c8473.png


确实是4没错 下一题!


函数二 求二叉树第K层的节点个数


还是一样 我们假设 K就是等于一


如果说是一个空数的话就返回0


如果说有值的话就返回一个1就可以


假设这个这层既不为空 又不是第K层的话 那么就说明第K层肯定是子树下面


那么就说明是左右子树的第(K-1)层


那么只将它们相加并且返回它们的值就好了


核心代码表示如下


int BinaryTreeLevelKSize(BTnode* root, int k)
{
  // 极限情况 K=1
  if (root==NULL)
  {
    return 0;
  }
  if (k==1)
  {
    return 1;
  }
  // 说明这棵树的节点在root节点下面
  // 转化为求子节点的k-1节点问题 
  return BinaryTreeLevelKSize(root->left, k - 1) + BinaryTreeLevelKSize(root->right, k - 1);
}


我们来看看结果怎么样


a17cc4fd683146a081487a707668d147.png


8ad52c5eb8db48b2974dd766518592e5.png


符合预期


函数三 求二叉树的深度


这里还是一样 我们先来看图


209cce38a899480d9f5fa6ea65e7c074.png


我们先来看第极限的情况


假如我们的本身就是一个空树的话 我们可以直接返回0


如果不是空树的话我们可以寻找我们的左子树和右子树中的较大值(一样大返回哪一个都可以)


将它们加一后返回就可以


核心代码如下


int BinaryTreeHight(BTnode* root)
{
  // 极限情况
  if (root==NULL)
  {
    return 0;
  }
  // 后面的情况 
  int left = BinaryTreeHight(root->left);
  int right = BinaryTreeHight(root->right);
  return left > right ? left + 1 : right + 1;
}


还是一样我们来看看效果


816615eb49464378b8cdda5c2ad4218d.png


深度是4确实没错


3e7163f15d44479a84a305ca7370efb3.png


函数四 求某个值为X的节点


还是一样 我们首先考虑极限情况


假设值就在根上


那么我们直接返回根的位置就好了


否则的话我们就往左边右边子树遍历


我们来看看核心代码


BTnode* BinaryTreeFind(BTnode* root, BTdate x)
{
  // 极限情况 
  if (root==NULL)
  {
    return NULL;
  }
  if (root->date==x)
  {
    return root;
  }
  // 找左子树
  BTnode* left = BinaryTreeFind(root->left, x);
  if (left)
  {
    return left;
  }
  // 找右子树
  BTnode* right = BinaryTreeFind(root->left, x);
  if (right)
  {
    return right;
  }
  // 都没找到
  return NULL;
}

22bd5b7a539249ddbbe5077894661cf1.png


我们发现这里可以找出来了


以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够


不吝赐教 在评论区或者私信指正 博主一定及时修正


那么大家下期再见咯


相关文章
|
20小时前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
1月前
|
机器学习/深度学习 存储 算法
数据结构实验之二叉树实验基础
本实验旨在掌握二叉树的基本特性和遍历算法,包括先序、中序、后序的递归与非递归遍历方法。通过编程实践,加深对二叉树结构的理解,学习如何计算二叉树的深度、叶子节点数等属性。实验内容涉及创建二叉树、实现各种遍历算法及求解特定节点数量。
85 4
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
56 4
|
1月前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
132 8
|
2月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
32 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
2月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
37 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
2月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
33 1
|
2月前
|
算法 Java C语言
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
30 1
|
2月前
|
存储
【数据结构】二叉树链式结构——感受递归的暴力美学
【数据结构】二叉树链式结构——感受递归的暴力美学
|
2月前
|
存储 算法
探索数据结构:分支的世界之二叉树与堆
探索数据结构:分支的世界之二叉树与堆