编写递归算法,计算二叉树中叶子结点的数目

1

#include<iostream>
using namespace std;typedef struct TNode//二叉树结构
{char nodeValue;//结点的值TNode* left;//左子树 TNode* right;//右子树
}*BiTree;
void CreateBiTree(BiTree &T)//先序遍历方式创建二叉树 ,输入.代表该结点为空
{char nodeValue;cin>> nodeValue; if(nodeValue!='.')//结点非空{T=new TNode;T->nodeValue=nodeValue;CreateBiTree(T->left); CreateBiTree(T->right);                    }else T=NULL; }
int CountLeaf(BiTree T)
{static int LeafNum=0;//叶子初始数目为0,使用静态变量//静态局部变量,防止下一次被初始化
/*
1.static全局变量与普通的全局变量有什么区别:
static全局变量只初使化一次,防止在其他文件单元中被引用。2.static局部变量和普通局部变量有什么区别:
static局部变量只被初始化一次,下一次依据上一次结果值。3.static函数与普通函数有什么区别:
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
https://blog.csdn.net/u011617097/article/details/50100533
*/if(T)//树非空{if(T->left==NULL&&T->right==NULL)//为叶子结点LeafNum++;//叶子数目加1// else//不为叶子结点//  {CountLeaf(T->left);//递归统计左子树叶子数目CountLeaf(T->right);//递归统计右子树叶子数目//  }}return LeafNum;
}int main()
{BiTree T;int leafNum;cout<<"请输入先序遍历的二叉树:"<<endl;CreateBiTree(T); leafNum=CountLeaf(T);cout<<"叶子结点数为:"<<leafNum<<endl;return 0;
}

2

#include<stdio.h>
#include<malloc.h>
struct node{char info;struct node *llink,*rlink;};
typedef struct node NODE;//没必要
NODE *creat()//指针
{char x;NODE *p;scanf("%c",&x);//printf("%c",x);检验if(x!='.'){p=(NODE *)malloc(sizeof(NODE));//先序创建树p->info=x;p->llink=creat();p->rlink=creat();}elsep=NULL;return p;
}int leafnum=0;//不能放置在函数里,要不然每次创建树都会初始化一次//全局变量在子函数和主函数里面有效,在子函数里运行,在主函数里输出
void run(NODE *t){if(t){if(t->llink==NULL&&t->rlink==NULL)leafnum++;run(t->llink);run(t->rlink);  }
}
main()
{NODE *T;printf("PLease input a tree:\n");T=creat();printf("\n");if(!T)printf("This is a empty binary tree.");else{ printf("the leaves number is:\n ");run(T);printf("%d",leafnum);//输出结果}}

同2

#include<stdio.h>
#include<malloc.h>
struct node{char info;struct node *llink,*rlink;};
typedef struct node NODE;
NODE *creat(){char x;NODE *p;scanf("%c",&x);printf("%c",x);if(x!='.'){p=(NODE *)malloc(sizeof(NODE));p->info=x;p->llink=creat();p->rlink=creat();}elsep=NULL;return p;
}
//2
int run(NODE *t){static int leafnum=0;//静态局部变量if(t){if(t->llink==NULL&&t->rlink==NULL)leafnum++;run(t->llink);run(t->rlink); }return leafnum;//1
}
main()
{NODE *T;printf("PLease input a tree:\n");T=creat();printf("\n");if(!T)printf("This is a empty binary tree.");else{ printf("the leaves number is:%d\n ",run(T));//3//printf("%d",leafnum);}printf("\n");
}

编写递归算法,计算二叉树中叶子结点的数目相关推荐

  1. 数据结构用递归算法计算二叉树中叶子结点数目的思想c语言程序,编写递归算法计算二叉树中叶子结点的数目。.doc...

    编写递归算法计算二叉树中叶子结点的数目. 学院名称专业班级实验成绩学生姓名学号实验日期课程名称数据结构实验题目2 树一.实验目的与要求 Cfree 三.实验内容和原理 [问题描述] [输入] &quo ...

  2. Java创建二叉树,并使用递归算法求二叉树中叶子结点的数目

    问题描述 创建二叉树,并使用递归算法求二叉树中叶子结点的数目 输入 输入一个用'.'来标明空子树的先根遍历序列,如ABD-EH-CF.I-G- 输出 叶子结点的个数 存储结构 二叉树 算法的基本思想 ...

  3. C/C++递归算法,计算二叉树中叶子结点的数目

    关键思路:叶子结点的度为0,即没有左孩子和右孩子 关键代码: int searchNum(BiTree T) {if (!T) return 0;else{int l, r;l=searchNum(T ...

  4. 统计二叉树中叶子结点数数据结构C语言,统计二叉树中叶子结点个数的问题,

    #include #include typedef struct Node { int data; struct Node *LChild; struct Node *RChild; }BiTNode ...

  5. java 获取叶子节点个数_数据结构编程: 统计二叉树中叶子结点的个数。

    展开全部 叶子节点:没有孩子节点的节点 也就是说,当我们明白了叶子节点的定义62616964757a686964616fe59b9ee7ad9431333363376531后,只需要遍历一遍二叉树,把 ...

  6. 统计二叉树中叶子节点的数目(数组实现)

    按照完全二叉树的形式输入二叉树的各结点数据(字符),其中虚结点用'@'表示.输入以'#'结束. 输出叶子结点的个数及具体值.第一行为为叶子结点的数据值,各数据用空格分隔,第二行为叶子结点的个数. 输入 ...

  7. 求二叉树中叶子结点的个数

    #include<iostream> #define N 63using namespace std;char str[] = "ab#d##c#e##"; int i ...

  8. 计算二叉树的叶子结点个数_C++数据结构二叉树统计总结点个数,叶子结点个数,单分支结点个数,双分支结点个数。...

    很多书上其实都有提到和该算法.但是经过自己的学习我自己想到一个算法.算是结合了其中的优点吧. 算法描述:该算法递归去统计结点个数.值得一提的是该系列算法都是统计根结点以下的符和条件的结点的个数进行了加 ...

  9. 输出二叉树中叶子结点的个数

    int leaf(tree * root) {if (root == NULL)//如果根节点为空,则返回空return 0;else if (root->lchild == NULL& ...

最新文章

  1. Transferring GANs: generating images from limited data 论文学习
  2. java ocr识别pdf_如何知道PDF是否仅包含图像还是已经过OCR扫描以进行搜索?
  3. C#中判断某软件是否已安装
  4. 推荐:用动画的形式呈现解LeetCode题目的思路(github上25000多star)
  5. 思考如何保证线程并行的数据安全性
  6. WPF定时刷新UI界面
  7. 【Networking】容器网络大观 SDN 资料汇总
  8. 知识图谱需要解决的问题
  9. 织梦文章添加字段填栏目id,内容页调用字段里的栏目文章
  10. DND(darmstadt noise dataset)数据集的坑
  11. orcl导入dmp语句_oracle中导入dmp数据注意事项
  12. tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法
  13. linux系统访问sftp,Linux上设置用户通过SFTP访问目录的权限的方法
  14. 【Auto.JS】入门宝典—Auto.JS开发使用笔记(随笔和使用心得)
  15. RandomAccessFile 随机读写文件
  16. 关于Java的点点滴滴(1)——Static关键字
  17. STM32与ARM7、ARM9、ARM11
  18. CPA十二--外币会计报表折算的方法(转载)
  19. 内网入口——代理搭建端口转发
  20. Python实现黑白棋人机对弈

热门文章

  1. 达梦数据库常用sql语句整理(3)
  2. html中table表格里的内容如何居中
  3. JS实现漂浮广告功能
  4. Vue中设置背景图片和透明度
  5. wps2019数据分析加载项_让人眼前一亮的WPS Office 2019的七大特色功能之表格篇
  6. android 实时更新textview,android应用开发:实时改变TextView的值
  7. 查找重复值和删除重复值,排序——PROC SORT 过程
  8. VMware、linux虚拟机设置网络实现虚拟机与主机网络互通
  9. 计算机科学 核心课程,计算机科学与技术的核心课程是什么?
  10. JAVA编程假定要为某个公司编写雇员工资支付程序,这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资