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

数据结构 ——— 计算链式二叉树叶子节点的个数以及计算链式二叉树的高度

目录

前言

链式二叉树示意图​编辑

手搓一个链式二叉树

计算链式二叉树的叶子节点个数

计算链式二叉树的高度 


前言

上一章学习了计算链式二叉树的节点个数

数据结构 ——— 计算链式二叉树节点的个数-CSDN博客

接下来学习的是计算链式二叉树叶子节点的个数以及计算链式二叉树的高度 


链式二叉树示意图


手搓一个链式二叉树

代码演示:

// 数据类型
typedef int BTDataType;// 二叉树节点的结构
typedef struct BinaryTreeNode
{BTDataType data; //每个节点的数据struct BinaryTreeNode* left; //指向左子树的指针struct BinaryTreeNode* right; //指向右子树的指针
}BTNode;// 申请新节点
BTNode* BuyNode(BTDataType x)
{BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));// 判断是否申请成功if (newnode == NULL){perror("malloc fail");return NULL;}// 初始化newnode->data = x;newnode->left = NULL;newnode->right = NULL;return newnode;
}BTNode* CreatBinaryTree()
{BTNode* n1 = BuyNode(1);assert(n1);BTNode* n2 = BuyNode(2);assert(n2);BTNode* n3 = BuyNode(3);assert(n3);BTNode* n4 = BuyNode(4);assert(n4);BTNode* n5 = BuyNode(5);assert(n5);BTNode* n6 = BuyNode(6);assert(n6);n1->left = n2;n1->right = n4;n2->left = n3;n4->left = n5;n4->right = n6;return n1;
}

计算链式二叉树的叶子节点个数

代码演示:

int BtreeLeafSize(BTNode* root)
{if (root == NULL)return 0;if (root->left == NULL && root->right == NULL)return 1;return BtreeLeafSize(root->left) + BtreeLeafSize(root->right);
}

代码解析:

当 root 为空时,说明没有节点,返回 0
当 root 的 left 和 root 的 right 为空时,就说明 root 为叶子节点,返回 1
通过 BTreeLeafSize 函数递归找到二叉树的所有叶子节点

大致走读代码(以上图为例):

进入函数,root 为 1 节点,那么就会走 BTreeLeafSize(root->left)
直到走到 root 为 3 节点,root 的 left 和 root 的 right 都为空,那么说明当前 root 为叶节点
返回 1 ,注意:并不是直接返回,而是返回到上一层,也就是 root 为 2 节点时
因为 2 节点的 right 为空,所当 root 为 2 节点的 right 时,返回 0
返回到 root 为 节点 1 时,那么就会走 BTreeLeafSize(root->right)………………
最后递归完之后,返回的值,就是链式二叉树的叶子节点个数

代码验证:


计算链式二叉树的高度(分治算法)

代码演示:

int BTreeHeight(BTNode* root)
{if (root == NULL)return 0;int leftHeight = BTreeHeight(root->left);int rightHeight = BTreeHeight(root->right);return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;
}

代码解析:

当 root 为空时,说明没有节点,返回 0
创建两个变量用来记录左右子树的节点高度
最后再比较,返回高的那个节点的高度,也就是整个二叉树的高度

大致走读代码(以上图为例):

进入函数,root 为 1 节点,先走 BTreeHeight(root->left)
直到 root 为 3 节点的 left 节点,为空返回 0,返回到 3 节点
再走 BTreeHeight(root->right) ,也就是 3 节点的 right 节点,同样为空返回 0
此时的 leftHeight 和 rightHeight 同样为 0,返回 0+1
也就是返回到 root 为 2 节点的时候,且 2 节点的 right 为空,返回 0
此时 2 节点的 leftHeight 为 1,rightHeight 为 0,比较后,返回 1+1
返回的 2 返回到 root 为 1节点的时候,再走 BTreeHeight(root->right)………………
直到递归走完,最后返回的结果就是左右子树比较大的值,也就是二叉树的高

代码验证:


http://www.mrgr.cn/news/65960.html

相关文章:

  • 时刻练习基本功
  • 数据迁移: 安全高效转移数据, 满足企业业务需求和技术改进
  • 国产服务器部署2.离线安装docker26与docker-compose
  • CasaOS香橙派安装HomeAssistant智能家居系统并实现远程管理家中智能设备
  • word及Excel常见功能使用
  • Windows部署rabbitmq
  • backtrader下的轮动策略模板,附年化20.6%的策略源码。
  • 连锁餐饮企业-凡塔斯,用千里聆RPA搭建用户评价管理系统,提升门店服务满意度
  • Qt项目实战:银行利息(贷款)计算器
  • druid-multi-tenant-starter将系统改造成多租户系统如此简单
  • 企业邮箱后缀优化:提升邮件送达率的策略!
  • 三周精通FastAPI:32 探索如何使用pytest进行高效、全面的项目测试!
  • W55RP20-EVB-Pico评估板介绍
  • Android camera2
  • 全面提升小程序用户体验,让你的小程序一举夺目
  • 【Rust中的迭代器】
  • 植物神经紊乱不用怕,这些维生素来帮你!
  • OJ03:删除有序数组中的重复项
  • PHP电商供应链ERP管理系统小程序源码
  • SQL优化 - group by优化
  • 俄罗斯市场开发秘籍大公开
  • Vagrant使用教程:创建CentOS 8虚拟机
  • Ubuntu20.04两种安装及配置中文界面、输入法、换源、共享文件夹实现,及注意事项
  • 从0到1!手把手教你私域流量变现的5个必备技能
  • 使用实例讲解RTOS的内核结构、任务调动、资源管理、中断处理
  • 把握数字化新趋势,迎接生态架构新时代——The Open Group 2024生态系统架构·可持续发展年度大会参会指南