二叉树结点、叶子结点个数,高度,第K层几个结点

约定不等于承诺〃 2022-05-08 15:52 383阅读 0赞

文章目录

      • 结点个数
      • 叶子结点个数
      • 二叉树高度
      • 第K层几个结点
  1. 二叉树的结点个数
  2. 二叉树叶子结点个数
  3. 二叉树第K层结点个数
  4. 二叉树的高度

在二叉树中,我们经常用到递归,再用递归的时候,经常会用到:递推公式,终止条件
递推公式:如果左子树和右子树的结果都有了,按照这个二叉树有三个结点往下操作
终止条件:递归一般都必须有终止条件,按照二叉树的五种基本形态考虑终止条件会比较简单一点
最后就是要考虑递归函数中的参数会不会发生改变

结点个数

递推公式:左子树结点个数 + 右子树结点个数 + 1
终止条件:空树返回0

  1. int GetTreeSize(BNode *root)
  2. {
  3. if (root == NULL)
  4. {
  5. return 0;
  6. }
  7. return GetTreeSize(root->left) + GetTreeSize(root->right) + 1;
  8. }

叶子结点个数

递推公式:左子树叶子结点 + 右子树叶子结点
终止条件:空树返回0
          如果一个结点左右孩子都为NULL,返回1

  1. int GetLeafSize(BNode *root)
  2. {
  3. if (root == NULL)
  4. {
  5. return 0;
  6. }
  7. if (root->left == NULL && root->right == NULL)
  8. {
  9. return 1;
  10. }
  11. return GetLeafSize(root->left) + GetLeafSize(root->right);
  12. }

二叉树高度

递推公式:MAX(左子树高度,右子树高度) + 1,就是较大值 + 1
终止条件:空树,返回0

  1. #define MAX(a, b) (a) > (b) ? (a) : (b)
  2. int GetTreeHeight(BNode *root)
  3. {
  4. if (root == NULL)
  5. {
  6. return 0;
  7. }
  8. int height1 = GetTreeHeight(root->left);
  9. int height2 = GetTreeHeight(root->right);
  10. return MAX(height1, height2) + 1;
  11. }

第K层几个结点

递推公式:左子树K层结点个数 + 右子树K层结点个数
终止条件:空树,返回0
          K== 1,返回1,表示只有一个结点,高度为1

  1. int GetTreeKSize(BNode *root, int k)
  2. {
  3. assert(k > 0);
  4. if (root == NULL)
  5. {
  6. return 0;
  7. }
  8. if (k == 1)
  9. {
  10. return 1;
  11. }
  12. return GetTreeKSize(root->left, k--) + GetTreeKSize(root->right, k--);
  13. }

在二叉树的相关操作中,一定要学会推递推公式和终止条件

发表评论

表情:
评论列表 (有 0 条评论,383人围观)

还没有评论,来说两句吧...

相关阅读

    相关 搜索K

    给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 我的几万个递归的代码: /

    相关 叶子计数

    一、 问题描述 实现输入二叉树,输出叶子结点个数。 二、 数据结构设计 由于输入的二叉树是字符串形式,首先需要由输入的标明空子树的先根遍历序列创建一棵二叉树,创建二叉