【代码】求二叉树叶子结点的个数、递归方式
编写算法,求二叉树叶子结点的个数
题目分析:
求二叉树的叶子结点,就是求二叉树上左右孩子结点都是空的结点,还记得二叉树的三种遍历方式吗?前序遍历、中序遍历和后序遍历,在递归遍历算法中,无论采取哪种遍历方式,我们只需要添加一个条件就可以求得树的叶子结点啦
判断是否是叶子结点的条件是:
题中我采用的前序遍历,我们看代码吧
建立的二叉树形状:
代码实现:
注:此代码除《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
【代码】求二叉树叶子结点的个数、递归方式相关推荐
- 求二叉树叶子结点及其个数
先序遍历.中序遍历.后序遍历,其实本质都是一样的 图片来源于传智播客课程 //求叶子节点个数,先序 int sum = 0; void Ynumber(BinNode * root) { if ...
- 【数据结构·考研】二叉树叶子结点的个数
二叉树叶子结点的个数 非递归的求法,用广度优先遍历,每出队一个结点,判断它是不是叶子结点.递归的做法,先由上自下遍历,等遍历到叶子处再逐层返回左右子树的叶子结点总和,最后得到整棵树的叶子结点数. 那么 ...
- 求二叉树第K层的节点个数+求二叉树叶子节点的个数
size_t _FindLeafSize(Node* root) //求二叉树叶子节点的个数 { //static size_t count = 0; ...
- c语言实现求二叉树叶子结点个数
通过递归求解二叉树叶子结点个数,关键在于递归结束条件的设置. main.c #include<stdio.h>//定义结点类型 typedef struct BINARYNODE {cha ...
- c语言求树上节点的双亲,用非递归算法求二叉树叶子结点的c语言代码怎样写?...
递归算法:是一种直接或者间接地调用自身的算法.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归算法的特点 递归过程一般通过函数或子过程来实现. 递归 ...
- 求树的叶子结点的个数
// 树的遍历.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include <iostream>using namespac ...
- 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)
以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...
- 数据结构----二叉树叶子结点到根节点的高度计算
数据结构----二叉树叶子结点到根节点的高度计算 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...
- 求二叉树上结点的路径c语言版,求二叉树根到给定节点的路径设计报告.doc
求二叉树根到给定节点的路径设计报告 题目: 求二叉树根到给定节点的路径 摘要:本程序设计题要求出二叉树的根节点到给定节点的路径,我们利用二叉树的双亲存储表示法建立二叉树,然后在树的叶子节点中找到给定的 ...
- C++ 将二叉树叶子结点从左往右顺序串连
关键代码: //将叶子结点从左往右顺序串连 void linkLeafNode(BTNode *p,BTNode *&head,BTNode *&tail) {if(p!=NULL){ ...
最新文章
- GRE核心词汇助记与精练-List11弯、折、扭
- sql语句转化为分页查询的一种实现
- 我的Python成长之路---第一天---Python基础(5)---2015年12月26日(雾霾)
- sklearn PCA特征降维
- 使用xjc一秒钟生成您的JAXB类
- 探索比特币源码1-运行 Bitcoin Core Node
- 携手伙伴谋增长 同心协力齐飞飏
- jq之省市区级联插件
- js根据已知数组长度创建一个一样长度的数组并初始化值为0
- Spark基础学习笔记16:创建RDD
- 频率泄露以及加窗原理
- IDEA 常用快捷键与设置
- VB进度条 游戏血条控件
- 教学中计算机软件的应用,计算机软件应用类课程教学方法
- 大型网站技术架构+核心原理与案例分析+李智慧
- 题解 UVA12304 【2D Geometry 110 in 1!】
- Android CPU 双核,骁龙MSM8625双核处理器
- 30岁学习编程晚么?
- python获取股指_用Python读取csv文件中的沪深300指数历史交易数据
- 目前最新android处理器排行榜,2016上半年安卓手机处理器排行:骁龙820无意外夺冠...
热门文章
- Java身份证号码识别系统(开源项目)
- TMOD TCON SCON
- 针对初学者的 MQL 5 中的自定义指标
- abaqus与python后处理_abaqus用Python批量后处理教程!如何从abaqus导出python
- 网易云短信接口(验证码类短信||通知类短信)
- AI理论知识整理(4)-期望与方差以及联合概率分布
- MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(1) SolidWorks模型的导入
- Michele Maggiore《A Modern Introduction to Quantum Field Theory》(米歇尔·马焦雷《量子场论现代导引》)中文目录
- 每日一词20190313——地图矢量化
- 计算机二进制教案教程,计算机的二进制教案.doc