编写算法,求二叉树叶子结点的个数


题目分析:

求二叉树的叶子结点,就是求二叉树上左右孩子结点都是空的结点,还记得二叉树的三种遍历方式吗?前序遍历、中序遍历和后序遍历,在递归遍历算法中,无论采取哪种遍历方式,我们只需要添加一个条件就可以求得树的叶子结点啦

判断是否是叶子结点的条件是:

题中我采用的前序遍历,我们看代码吧

建立的二叉树形状:

代码实现:

注:此代码除《Domain.h》里面的算法之外,其余代码皆为二叉树的基本操作内容,若有不明白的地方可参考文章:树的基本操作

BiTree.h:

#pragma once
#include<stdio.h>
#include<stdlib.h>
//结点的结构体
struct  BiTreeNode
{char data;             //数据域BiTreeNode *LeftChild; //左指针域BiTreeNode *RightChild;//右指针域
};
typedef BiTreeNode DataType;
//初始化
void initiate(BiTreeNode **root)
{(*root) = (BiTreeNode*)malloc(sizeof(BiTreeNode));(*root)->LeftChild = NULL;(*root)->RightChild = NULL;
}
//在结点的左孩子结点插入新的数据结点
BiTreeNode *LeftInsert(BiTreeNode *root, char data)
{if (root == NULL){printf("未找到当前结点,插入失败!\n");return NULL;}BiTreeNode *q = (BiTreeNode*)malloc(sizeof(BiTreeNode));q->data = data;q->RightChild = NULL;q->LeftChild = root->LeftChild;root->LeftChild = q;return q;
}
//在结点的右孩子结点插入新的数据结点
BiTreeNode *RightInsert(BiTreeNode *root, char data)
{if (root == NULL){printf("未找到当前结点,插入失败!\n");return NULL;}BiTreeNode *q = (BiTreeNode*)malloc(sizeof(BiTreeNode));q->data = data;q->LeftChild = NULL;q->RightChild = root->RightChild;root->RightChild = q;return q;
}
//访问数据域
void Visit(char data)
{printf("%c  ", data);
}
//二叉树的前序遍历
void PreOrder(BiTreeNode *root)
{if (root != NULL){Visit(root->data);PreOrder(root->LeftChild);PreOrder(root->RightChild);}
}

Domain.h:

#pragma once
#include"BiTree.h"
/*求二叉树叶子结点个数,采用前序遍历*/
int NumOfLeff(DataType *root)
{//采用static,每次进入函数的时候number不会被重新置0static int number = 0;if (root != NULL){/*判断为叶子结点的条件——没有左右孩子结点*/if (root->LeftChild == NULL && root->RightChild == NULL)number++;NumOfLeff(root->LeftChild);NumOfLeff(root->RightChild);}return number;
}

main.c:

#include"Domain.h"
int main()
{DataType *root,*p;initiate(&root);p = root;p = LeftInsert(p, 'A');p = LeftInsert(p, 'B');p = LeftInsert(p, 'D');LeftInsert(p, 'H');RightInsert(p, 'G');p = RightInsert(root->LeftChild , 'C');LeftInsert(p, 'E');RightInsert(p, 'F');//以上为创建一颗二叉树printf("前序遍历:\n");PreOrder(root->LeftChild);//测试叶子结点个数printf("\n叶子结点个数:");printf("%d  \n", NumOfLeff(root->LeftChild));system("pause");return 0;
}

有需要非递归解法的小伙伴私信我~


代码编译器:Visual Studio 2017
ok

【代码】求二叉树叶子结点的个数、递归方式相关推荐

  1. 求二叉树叶子结点及其个数

    先序遍历.中序遍历.后序遍历,其实本质都是一样的 图片来源于传智播客课程 //求叶子节点个数,先序 int sum = 0; void Ynumber(BinNode * root) {     if ...

  2. 【数据结构·考研】二叉树叶子结点的个数

    二叉树叶子结点的个数 非递归的求法,用广度优先遍历,每出队一个结点,判断它是不是叶子结点.递归的做法,先由上自下遍历,等遍历到叶子处再逐层返回左右子树的叶子结点总和,最后得到整棵树的叶子结点数. 那么 ...

  3. 求二叉树第K层的节点个数+求二叉树叶子节点的个数

    size_t _FindLeafSize(Node* root)     //求二叉树叶子节点的个数     {         //static size_t count = 0;          ...

  4. c语言实现求二叉树叶子结点个数

    通过递归求解二叉树叶子结点个数,关键在于递归结束条件的设置. main.c #include<stdio.h>//定义结点类型 typedef struct BINARYNODE {cha ...

  5. c语言求树上节点的双亲,用非递归算法求二叉树叶子结点的c语言代码怎样写?...

    递归算法:是一种直接或者间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归算法的特点 递归过程一般通过函数或子过程来实现. 递归 ...

  6. 求树的叶子结点的个数

    // 树的遍历.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostream>using namespac ...

  7. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)

    以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...

  8. 数据结构----二叉树叶子结点到根节点的高度计算

    数据结构----二叉树叶子结点到根节点的高度计算 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...

  9. 求二叉树上结点的路径c语言版,求二叉树根到给定节点的路径设计报告.doc

    求二叉树根到给定节点的路径设计报告 题目: 求二叉树根到给定节点的路径 摘要:本程序设计题要求出二叉树的根节点到给定节点的路径,我们利用二叉树的双亲存储表示法建立二叉树,然后在树的叶子节点中找到给定的 ...

  10. C++ 将二叉树叶子结点从左往右顺序串连

    关键代码: //将叶子结点从左往右顺序串连 void linkLeafNode(BTNode *p,BTNode *&head,BTNode *&tail) {if(p!=NULL){ ...

最新文章

  1. GRE核心词汇助记与精练-List11弯、折、扭
  2. sql语句转化为分页查询的一种实现
  3. 我的Python成长之路---第一天---Python基础(5)---2015年12月26日(雾霾)
  4. sklearn PCA特征降维
  5. 使用xjc一秒钟生成您的JAXB类
  6. 探索比特币源码1-运行 Bitcoin Core Node
  7. 携手伙伴谋增长 同心协力齐飞飏
  8. jq之省市区级联插件
  9. js根据已知数组长度创建一个一样长度的数组并初始化值为0
  10. Spark基础学习笔记16:创建RDD
  11. 频率泄露以及加窗原理
  12. IDEA 常用快捷键与设置
  13. VB进度条 游戏血条控件
  14. 教学中计算机软件的应用,计算机软件应用类课程教学方法
  15. 大型网站技术架构+核心原理与案例分析+李智慧
  16. 题解 UVA12304 【2D Geometry 110 in 1!】
  17. Android CPU 双核,骁龙MSM8625双核处理器
  18. 30岁学习编程晚么?
  19. python获取股指_用Python读取csv文件中的沪深300指数历史交易数据
  20. 目前最新android处理器排行榜,2016上半年安卓手机处理器排行:骁龙820无意外夺冠...

热门文章

  1. Java身份证号码识别系统(开源项目)
  2. TMOD TCON SCON
  3. 针对初学者的 MQL 5 中的自定义指标
  4. abaqus与python后处理_abaqus用Python批量后处理教程!如何从abaqus导出python
  5. 网易云短信接口(验证码类短信||通知类短信)
  6. AI理论知识整理(4)-期望与方差以及联合概率分布
  7. MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(1) SolidWorks模型的导入
  8. Michele Maggiore《A Modern Introduction to Quantum Field Theory》(米歇尔·马焦雷《量子场论现代导引》)中文目录
  9. 每日一词20190313——地图矢量化
  10. 计算机二进制教案教程,计算机的二进制教案.doc