求树的叶子结点的个数
// 树的遍历.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <iostream>using namespace std;struct BTNode{int data;struct BTNode *lchild, *rchild;
};
typedef struct BTNode BTnode;
typedef struct BTNode* BiTree;void preOrder(BTNode *root){if (root == NULL){return;}printf("%d",root->data);//遍历左子树preOrder(root->lchild);//遍历右子树preOrder(root->rchild);
}
void inOrder(BTNode *root){//中序遍历if (root == NULL){return;}//遍历左子树preOrder(root->lchild);printf("%d", root->data);//遍历右子树preOrder(root->rchild);
}
void postOrder(BTNode *root){//后序遍历if (root == NULL){return;}//遍历左子树preOrder(root->lchild);//遍历右子树preOrder(root->rchild);printf("%d", root->data);
}
int sum;
void cntLeaf(BTNode *root){//求叶子结点的个数if (root != NULL){if (root->lchild == NULL&&root->rchild == NULL){sum++;}if (root->lchild){cntLeaf(root->lchild);}if (root->rchild){cntLeaf(root->rchild);}}
}
//sum做全局变量 当多线程编程时 会造成资源竞争 因而不建议那么用
//解决方案:把全局变量变成函数参数
void cntLeaf2(BTNode *root,int *sum2){if(root != NULL){if (root->lchild == NULL&&root->rchild == NULL){(*sum2)++;}//这句话放在中间,后面都可以,因为只是访问的顺序不一样,但是都会去访问的,只是先序中序后序的差别而已,本质是一样的if (root->lchild){cntLeaf2(root->lchild,sum2);}if (root->rchild){cntLeaf2(root->rchild,sum2);}}
}int _tmain(int argc, _TCHAR* argv[])
{BTNode t1, t2, t3, t4, t5;memset(&t1,0,sizeof(BTNode));memset(&t2, 0, sizeof(BTNode));memset(&t3, 0, sizeof(BTNode));memset(&t4, 0, sizeof(BTNode));memset(&t5, 0, sizeof(BTNode));t1.data = 1;t2.data = 2;t3.data = 3;t4.data = 4;t5.data = 5;//建立关系t1.lchild = &t2;t1.rchild = &t3;t2.lchild = &t4;t3.lchild = &t5;//树的遍历cout << "先序遍历" << endl;preOrder(&t1);cout << "中序遍历" << endl;inOrder(&t1);cout << "后序遍历" << endl;postOrder(&t1);//求叶子结点的个数cntLeaf(&t1);cout << "叶子结点个数:" << sum << endl;//优化 求叶子结点的个数{int mySum = 0;cntLeaf2(&t1, &mySum);cout << "叶子结点个数:" << mySum << endl;}return 0;
}
求树的叶子结点的个数相关推荐
- 求二叉树中叶子结点的个数
#include<iostream> #define N 63using namespace std;char str[] = "ab#d##c#e##"; int i ...
- 31行代码AC——PTA 求二叉树的叶子结点个数 (20分)——解题报告
励志用尽量少的代码做高效的表达. 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示该二叉树是空 ...
- 求二叉树的叶子结点个数
7-5 求二叉树的叶子结点个数 (20 分) 以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数. 输入格式: 输入二叉树的先序序列. 提示:一棵二叉树的先序序列是一个字符串,若字符是'#',表示 ...
- java语言 写一算法求其叶子数目_数据结构(Java)在线作业1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树共有( )个结点。A. n+1B. 2n-1...
数据结构(Java)在线作业1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树共有( )个结点.A. n+1B. 2n-1 数据结构(Java)在线作业 1. 设n为哈夫曼树的叶子结点数目,则该哈夫曼树 ...
- Java创建二叉树,并使用递归算法求二叉树中叶子结点的数目
问题描述 创建二叉树,并使用递归算法求二叉树中叶子结点的数目 输入 输入一个用'.'来标明空子树的先根遍历序列,如ABD-EH-CF.I-G- 输出 叶子结点的个数 存储结构 二叉树 算法的基本思想 ...
- 二叉树题目----4 前序遍历重构二叉树 AND 求二叉树中所有结点的个数
前序遍历重构二叉树 思路 整个二叉树用数组存储 因为先序遍历它先遍历根,再遍历左,左边没有跑完是不会去遍历右边的,所以遍历左子树,就是数组元素每回向后一个,个数-1 遍历右边时,就是数组起始位置+左子 ...
- 树中的叶子结点的个数 计算方法
树中的叶子结点的个数计算 例题: 计算方法已知在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶子结点的个数为? 解决这道题的思路是列出 ...
- 树的应用:求树的叶子节点数 求树的高度、copy一棵树
#if 0 //树的应用 //1.求树的叶子节点: 度为0的节点 //先判断根节点是否是叶子节点,然后计算左子树的叶子节点个数 //在计算 右子树节点个数void coutLeaf(BiNode *T ...
- 【数据结构·考研】二叉树叶子结点的个数
二叉树叶子结点的个数 非递归的求法,用广度优先遍历,每出队一个结点,判断它是不是叶子结点.递归的做法,先由上自下遍历,等遍历到叶子处再逐层返回左右子树的叶子结点总和,最后得到整棵树的叶子结点数. 那么 ...
最新文章
- 监控io性能, free命令, ps命令, 查看网络状态, linux下抓包
- html5基础知识文档,HTML5基础知识(1)
- 浅谈自然语言在科技时代的运用
- 针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块
- 实现自适应位置--footer紧贴浏览器底部
- base64 string 放不下_String、byte[]、Base64相互转换,不要再用错了
- css中的伪类 之 first-child
- 四平方和蓝桥杯Java_蓝桥杯-四平方和问题
- 基于Android的家校联系平台开发(论文)
- IBM8800存储,光钎交换机384B,主机Linux,二代支付前置
- Twaver-HTML5基础学习(5)告警元素(Alarm)的告警位置(偏移量以及定位理解)
- 安装postgreSQL出现configure:error:readline library not found解决方法及pg安装全过程
- Python网络爬虫与信息提取(二):网络爬虫之规则(Requests库 Robots规则)
- NPN PNP 接近开关
- Android动画总结系列(2)——补间动画使用
- netlink编程注意事项
- 杠子老虎鸡虫 《python二维游戏编程》课后项目一
- 游戏客户端安全方案。
- 名帖52 王献之 小楷《洛神赋》
- [审核]App Store审核指南