算法代码很简单都是用使用递归计算,大家把递归思想领悟到就ok了

二叉树高度算法

//求二叉树的高度 采用递归的方式
void GetHeight(BiTree tree, int* heightNum)
{if (NULL != tree){int LHeight;int RHight;GetHeight(tree->lchild,&LHeight);GetHeight(tree->rchild,&RHight);*heightNum = LHeight > RHight ? LHeight + 1 : RHight + 1;}else{*heightNum = 0;}
}

二叉树叶子结点数量算法

//求二叉树的叶子结点 采用递归的方式计算叶子结点个数
void GetLeaf(BiTree tree,int* leafNum)
{if (NULL != tree){if (tree->lchild == NULL && tree->rchild == NULL){*leafNum += 1;}GetLeaf(tree->lchild,leafNum);GetLeaf(tree->rchild,leafNum);}
}

完整代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef char EleType;
typedef struct BiTNode
{EleType data;//数据结点数据域struct BiTNode   *lchild, *rchild;//左孩子,右孩子结点指针域
}BiTNode,*BiTree;//约定通过前序遍历创建结点
//每个结点都有左右孩子,孩子不存在为NULL
void CreatBiTree(BiTree* tree)
{char c;scanf("%c",&c);if (' '== c){*tree = NULL;}else{*tree = (BiTNode*)malloc(sizeof(BiTNode));(*tree)->data = c;CreatBiTree(&(*tree)->lchild);//创建左子树CreatBiTree(&(*tree)->rchild);//创建右子树}
}
void VisitNode(EleType data)
{printf("%c ", data);return;
}
//前序遍历
void PreOrderTraverse(BiTree tree)
{if (NULL != tree){VisitNode(tree->data);PreOrderTraverse(tree->lchild);PreOrderTraverse(tree->rchild);}
}//求二叉树的叶子结点 采用递归的方式计算叶子结点个数
void GetLeaf(BiTree tree,int* leafNum)
{if (NULL != tree){if (tree->lchild == NULL && tree->rchild == NULL){*leafNum += 1;}GetLeaf(tree->lchild,leafNum);GetLeaf(tree->rchild,leafNum);}
}
//求二叉树的高度 采用递归的方式
void GetHeight(BiTree tree, int* heightNum)
{if (NULL != tree){int LHeight;int RHight;GetHeight(tree->lchild,&LHeight);GetHeight(tree->rchild,&RHight);*heightNum = LHeight > RHight ? LHeight + 1 : RHight + 1;}else{*heightNum = 0;}
}
int main(int argc, char *argv[])
{BiTree tree = NULL;printf("请按前序遍历的方式输入结点数据,孩子结点为NULL用空格代替:");CreatBiTree(&tree);printf("前序遍历:");PreOrderTraverse(tree);int heightNum,leafNum = 0;GetLeaf(tree, &leafNum);GetHeight(tree, &heightNum);printf("\n二叉树的高度:%d", heightNum);printf("\n二叉树的叶子结点数目:%d",leafNum);printf("\n");return 0;
}

运行结果测试

我们下图的二叉树进行测试。

运行结果如下,注意:我们创建结点时的前序输入:ABC__D__EF__G__,一个_表示一个空格哟。

树:求二叉树的高度和叶子结点数量相关推荐

  1. java 树最大距离_寻找二叉树最远的叶子结点(实例讲解)

    面试的时候碰到一个题:如何找到一个二叉树最远的叶子结点,以及这个叶子结点到根节点的距离? 第一反应肯定是递归 如何能找到最远的叶子结点,同时也能记下这个叶子节点到根节点的距离呢?采用一个List保持从 ...

  2. 2021-10-09 求二叉树的高度(递归和迭代版本)

    剑指 Offer 55 - I. 二叉树的深度 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度. 和题解写的一比,我写的 ...

  3. 计算二叉树的深度和叶子结点数(递归算法实现)

    [问题描述] 计算二叉树的深度和叶子结点数 [输入形式] 输入二叉树的先序遍历序列建立二叉树. [输出形式] 输出二叉树的叶子结点数和深度. [样例输入] A B C # # # # [样例输出] L ...

  4. 输出二叉树中从每个叶子结点到根结点的路径,统计二叉树的度为1的结点个数,二叉树算表达式(C语言)

    1.建立如下图表达式二叉树,并求值. (只涉及加减乘除运算) +*3##4##/8##4## (先序建立表达式) 2.统计二叉树的度为1的结点个数: 3.输出二叉树中从每个叶子结点到根结点的路径. # ...

  5. 49 - 算法 - LeetCode 110 平衡二叉树 - 求二叉树的高度 -双重递归

    // 求二叉树的高度函数 nullptr为0 然后累加 +1 return left-right // 结论都还是递归 当前状态 多加了一个递归求高度 双重递归 class Solution {pub ...

  6. Java实现判断叶子节点_寻找二叉树最远的叶子结点(实例讲解)

    二叉树最远的叶子实例分享 面试的时候碰到一个题:如何找到一个二叉树最远的叶子结点,以及这个叶子结点到根节点的距离? 第一反应肯定是递归 如何能找到最远的叶子结点,同时也能记下这个叶子节点到根节点的距离 ...

  7. 求二叉树中第K层结点的个数

    一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...

  8. 求二叉树中结点个数代码java_求二叉树中第K层结点的个数

    一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中第K层中的结点个数(根结点为第0层) 二,二叉树的构建 定义一个BinaryTree类来表示二叉树,二叉树BinaryTree 又是由 ...

  9. 求二叉树节点个数、叶子节点、节点层次与宽度

    需实现:(1)输出二叉树b的节点个数 (2)输出二叉树b的叶子节点个数 (3)求二叉树b中指定节点值(假设所有节点值不同)的节点的层次. (4)利用层次遍历求二叉树b的宽度 #include < ...

最新文章

  1. AI 重塑 IT的 5 种方式
  2. oracle连接查询详解
  3. node搭建的一个应用在前端项目中的可切换接口的代理服务器
  4. Hadoop-2.2.0学习之三YARN简介
  5. ACM入门之【线段树】
  6. java用tkmapper分组查询_mybatis example group by count 分组求和 - java分组求和
  7. php简单环境,PHP 简单的环境搭建
  8. springboot security 权限校验_springboot借助aop和注解实现权限校验
  9. 中兴天机Axon 10 Pro系列中国发布:售价3199元起
  10. UDID被禁用后的集中替代品
  11. 数据结构—二叉树,满二叉树、完全二叉树、二叉树的性质(思维导图)
  12. Vaughn Vernon谈云原生和反应式现状
  13. android监听返回键的方法,详解Html5 监听拦截Android返回键方法
  14. FastStone Capture——轻量级长截屏软件
  15. Python爬虫实战, QQ空间自动点赞
  16. MSM8937-MSM8953 I2C 配置调试指南
  17. 并联串联混合的电压和电流_初中物理归纳并联和串联的区别
  18. [html] img标签的alt属性
  19. 中国人民银行征信中心登录时无法输入密码,控件安装无效
  20. ShowType=0,● 交换机命令show interfaces type 0/port_# switchport|trunk用于显示中继连接的配置情况,下面 - 赏学吧...

热门文章

  1. Adobe Camera Raw13 for mac(PS Raw增效工具)支持M1
  2. java定时器克隆方式,Java-DropWizard指标计量器与计时器
  3. java集合是wftc_java的集合是什么?
  4. python字符串处理函数汇总_python字符串函数总结
  5. Qt笔记-解决QObject::startTimer: Timers cannot be started from another thread
  6. Spring Boot笔记-validation的使用及统一异常处理
  7. python字典文件,python-文件转字典,字典转文件
  8. 计算机板报设计简单,计算机板报制作
  9. python中post请求太慢_AJAX post请求每秒钟慢一次[Django]
  10. Django获取request header信息