DS二叉树--叶子数量
题目描述
计算一颗二叉树包含的叶子结点数量。
提示:叶子是指它的左右孩子为空。
建树方法采用“先序遍历+空树用0表示”的方法,即给定一颗二叉树的先序遍历的结果为AB0C00D00,其中空节点用字符‘0’表示。则该树的逻辑结构如下图。

输入
第一行输入一个整数t,表示有t个测试数据
第二行起输入二叉树先序遍历的结果,空树用字符‘0’表示,输入t行
输出
逐行输出每个二叉树的包含的叶子数量
样例输入
样例输出
这里只要修改一下任意一个遍历函数即可,将输出改为判断当前节点是否为叶子节点
#include<iostream>
#include<string>
using namespace std;
class BitreeNode
{
public:
char data;
BitreeNode *left;
BitreeNode *right;
BitreeNode():left(NULL),right(NULL){}
~BitreeNode(){}
};
class Bitree
{
private:
BitreeNode *Root;
int pos,count;
string strtree;
BitreeNode *CreateBitree();
void countleaves(BitreeNode *t);
public:
Bitree() { count = ; };
~Bitree() {};
void CreateTree(string TreeArray);
void countleaves();
};
void Bitree::CreateTree(string treearray)
{
pos = ;
strtree.assign(treearray);
Root = CreateBitree();
}
BitreeNode *Bitree::CreateBitree()
{
BitreeNode *T;
char ch;
ch = strtree[pos++];
if (ch == '')
T = NULL;
else
{
T = new BitreeNode();
T->data = ch;
T->left = CreateBitree();
T->right = CreateBitree();
}
return T;
}
void Bitree::countleaves()
{
countleaves(Root);
cout << count << endl;
}
void Bitree::countleaves(BitreeNode *t)
{
if (t)
{
if (!t->left && !t->right)
count++;
countleaves(t->left);
countleaves(t->right);
}
}
int main()
{
int t;
cin >> t;
while (t--)
{
string str;
cin >> str;
Bitree *tree;
tree = new Bitree();
tree->CreateTree(str);
tree->countleaves();
}
}
DS二叉树--叶子数量的更多相关文章
- DS二叉树--左叶子数量
题目描述 计算一颗二叉树包含的叶子结点数量. 左叶子是指它的左右孩子为空,而且它是父亲的左孩子 提示:可以用三叉链表法,也可以用现有算法对两层结点进行判断 建树方法采用“先序遍历+空树用0表示”的方法 ...
- 求二叉树第K层的节点个数+求二叉树叶子节点的个数
size_t _FindLeafSize(Node* root) //求二叉树叶子节点的个数 { //static size_t count = 0; if ...
- 六:二叉树中第k层节点个数与二叉树叶子节点个数
二叉树中第k层节点个数 递归解法: (1)假设二叉树为空或者k<1返回0 (2)假设二叉树不为空而且k==1.返回1 (3)假设二叉树不为空且k>1,返回左子树中k-1层的节点个数与右子树 ...
- PTA 统计二叉树叶子结点个数
6-2 统计二叉树叶子结点个数 (10 分) 本题要求实现一个函数,可统计二叉树的叶子结点个数. 函数接口定义: int LeafCount ( BiTree T); T是二叉树树根指针,函数Le ...
- DS二叉树--Huffman编码与解码
题目描述 1.问题描述 给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码. 构造Huffman树时,要求左子树根的权值小于.等于右子树根的权值. 进行Huffma ...
- DS二叉树--二叉树之父子结点
题目描述 给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构. 编写程序输出该树的所有叶子结点和它们的父亲结点 输入 第一 ...
- 二叉树叶子顺序遍历 · binary tree leaves order traversal
[抄题]: 给定一个二叉树,像这样收集树节点:收集并移除所有叶子,重复,直到树为空. 给出一个二叉树: 1 / \ 2 3 / \ 4 5 返回 [[4, 5, 3], [2], [1]]. [暴力解 ...
- UVa 712 S-Trees(二进制转换 二叉树叶子)
题意: 给定一颗n层的二叉树的叶子, 然后给定每层走的方向, 0代表左边, 1代表右边, 求到达的是那一个叶子. 每层有一个编号, 然后n层的编号是打乱的, 但是给的顺序是从1到n. 分析: 先用一个 ...
- DS二叉树--层次遍历
题目描述 层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点. 建树方法采用“先序遍历+空树用0表示”的方法 要求:采用队列对象实现,函数框架如下: 输入 第一行输入 ...
随机推荐
- VMware网络连接IP设置
网络配置(仅主机模式) 一.改变虚拟机IP地址达到联网目的 仅主机模式,第一步,打开我的电脑属性,查看VMt1网卡IP设置,设置一个区段:192.168.xx.aa xx.aa自由设置,简 ...
- Subsequence Count 2017ccpc网络赛 1006 dp+线段树维护矩阵
Problem Description Given a binary string S[1,...,N] (i.e. a sequence of 0's and 1's), and Q queries ...
- 【letcode】5-LongestPalindromicSubstring
回文串 回文串(palindromic string)是指这个字符串无论从左读还是从右读,所读的顺序是一样的:简而言之,回文串是左右对称的.一般求解一个字符串的最长回文子串问题. problem:Lo ...
- c# 休眠后 定时唤醒
源码见附件,执行唤醒功能前需要先对电源进行设置如下图: 源码
- hdu2389 Rain on your Parade 二分图匹配--HK算法
You’re giving a party in the garden of your villa by the sea. The party is a huge success, and every ...
- Eclipse实现数据库反向生成实体类(pojo)-------(插件安装和实现步骤的说明)
一.插件安装 1.下载插件: http://jaist.dl.sourceforge.net/sourceforge/jboss/HibernateTools-3.2.4.Beta1-R2008103 ...
- 【BZOJ2154】Crash的数字表格
算是学会反演了……(其实挺好学的一天就能学会…… 原题: 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能 ...
- Django 之 ORM
Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...
- day43 数据库学习 转自egon 老师博客 单表查询和多表查询
一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键 ...
- System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的 区别和用法
System.Windows.Forms.Timer执行的时候,如果你在过程中间加一个sleep整个的界面就死掉了,但是另外两个没有这个情况,System.Timers.Timer.System.Th ...