C++ 二叉树求叶子结点数及输出叶子结点的路径
话不多说,直接看代码
1.头文件及二叉树结点定义
#include<iostream>
using namespace std;
typedef struct Bitnode
{char data;struct Bitnode* lchild, * rchild;
}Bitnode,*Bitree;
2.建立二叉链表,这里用的是先序建立
void FCreatBitree(Bitree& T)//先序建立二叉链表
{char ch;cin >> ch;if (ch == '#')T = NULL;else{T = new Bitnode;T->data = ch;FCreatBitree(T->lchild);FCreatBitree(T->rchild);}
}
3.叶子结点数的计算,采用递归方法
int Leaves_count(Bitree T)//求叶子节点数
{int num=;if (T==NULL) {return 0;}if (T->lchild == NULL && T->rchild == NULL)num++;Leaves_count(T->lchild);Leaves_count(T->rchild);return num;
}
4.打印叶子结点路径
void Leaves_path(Bitree T)
{Bitree p, q;//定义2个结点用于保存int top = 0;//top为当前p所指结点位置Bitree s[50];//使用q保存刚遍历过的节点,初始为空q = NULL;p = T;//传入的结点赋值给pwhile (p != NULL || top != 0) //如果p不为空或者top不为零进入循环{if (p != NULL) //如果p不为空,直接遍历到一个左叶子结点{s[++top] = p;p = p->lchild;}//遍历完后,p即为一个左叶子结点,在下一个循环中进入else ifelse if (top > 0){p = s[top];//把上面遍历的最后结点赋给pif (p->rchild == NULL || p->rchild == q){//如果p为叶子节点,则打印路径if (p->lchild == NULL && p->rchild == NULL) {for (int i = 1; i <= top; i++)cout <<s[i]->data <<" ";cout << endl;}//使用q保存刚访问过的节点q = p;top--;//跳过刚才的左遍历,继续退栈p = NULL;}//否则遍历右子树else p = p->rchild;}}
}
5.主程序调用上方函数即可
C++ 二叉树求叶子结点数及输出叶子结点的路径相关推荐
- 二叉树 求叶子节点数并返回叶子节点个数
编程实现:求二叉树的叶子结点的个数,并打印输出所有叶子结点. 需要先构造一个二叉树,再对二叉树进行遍历,遍历到叶子节点就输出和个数+1 二叉树的结点类: package com.alibaba.str ...
- 7-10 先序序列创建二叉树,输出先序序列、中序序列、后序序列并输出叶子结点数 (10 分)
7-10 先序序列创建二叉树,输出先序序列.中序序列.后序序列并输出叶子结点数 (10 分) 对于给定的二叉树,输出其先序序列.中序序列.后序序列并输出叶子结点数. 输入格式: 二叉树的先序遍历序列. ...
- 代码实现求二叉树结点数和叶子结点数(C语言)
本篇会用到之前讲过的二叉树三种遍历方法的代码实现,当然这里还会再写一遍,可以先去看这篇博客二叉树的概念及三种遍历方法(C语言)_Perfectkn的博客-CSDN博客 目录 两种方法求二叉树结点总个数 ...
- 数据结构与算法实验 实验6:二叉树ADT的二叉链式实现 (由完全前序序列创建二叉树 / 求二叉树的节点数/树高/叶子节点数 /先序中序后序层序遍历)
假设二叉数的数据元素为字符,采用二叉链式存储结构.请编码实现二叉树ADT,其中包括创建二叉树.遍历二叉树(深度.广度).求二叉树的深度(高度).计算二叉树的元素个数.计算二叉树的叶子数.二叉树的格式输 ...
- 计算二叉树的深度和叶子结点数(递归算法实现)
[问题描述] 计算二叉树的深度和叶子结点数 [输入形式] 输入二叉树的先序遍历序列建立二叉树. [输出形式] 输出二叉树的叶子结点数和深度. [样例输入] A B C # # # # [样例输出] L ...
- c语言二叉树结点 深度,求二叉树的深度、总结点数和叶子结点数
二叉树的二叉链表的存储结构: typedef char TElemType; typedef struct BiTNode { TElemType data;//数据元素 BiTNo ...
- 统计二叉树中叶子结点数数据结构C语言,统计二叉树中叶子结点个数的问题,
#include #include typedef struct Node { int data; struct Node *LChild; struct Node *RChild; }BiTNode ...
- 二叉树遍历/先序输出叶子结点
二叉树遍历 函数接口定义: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void Postor ...
- 第五期 C/C++数据结构 二叉树的遍历以及结点数、深度
代码详见后面 实验三 树和二叉树 一.实验目的 1.使学生熟练掌握二叉树的逻辑结构和存储结构(重点). 2.熟练掌握二叉树的各种遍历算法(难点). 二.实验原理及说明 1. 前序遍历算法思想: (1) ...
- 设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树。假如一棵这样的二叉树中有m(m0)个叶子结点,那么该二叉树上的结点总数为( )。
设某种二叉树有如下特点:每个结点要么是叶子结点,要么有2棵子树.假如一棵这样的二叉树中有m(m>0)个叶子结点,那么该二叉树上的结点总数为( ). 正确答案: B 你的答案: B (正确) ...
最新文章
- 关于python变量的描述_Python变量命名的详细介绍
- linux安装nodejs一键脚本,ubuntu16.04部署nodejs+vue框架脚本
- 115网盘linux 下载速度慢,linux vps 上 下载115网盘 的方法
- C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
- linux输出和错误信息文件,Log4j配置将错误信息输出到指定文件中[linux tomcat]
- 河外动态:疑似UFO的编队在太阳附近徘徊
- 错误使用sym MEX文件 'D:\matlab\toolbox\maple\maplemex.mexw64' 无效: 缺少依赖共享库 的解决办法
- UnauthorizedAccessException Invaild cross-thread access
- window2008 、 oracle11.2g 无法imp,dmp。
- C++类头文件交叉引用出现error C2143: 语法错误: 缺少“
- mysql 插入语句语法_SQL 插入数据(INSERT INTO 语句)
- 【路径规划】全局路径规划算法——Dijkstra算法(含python实现)
- PADS9.5实战攻略与高速PCB设计-强烈推荐教程资料(完整书签)
- 《下学梯航》(全文)
- 2020年证券从业《证券市场基本法律法规》真题汇编卷一
- Spring:ReflectionUtils工具类使用一:Field
- srsRAN源码分析----enb端协议栈是如何运作
- golang学习和校招经历
- KB 与 kb 的区别
- 单相全桥逆变原理及仿真实验