1 #include <fstream>
 2 #include <iostream>
 3
 4 using namespace std;
 5
 6 struct node
 7 {
 8     char c;
 9     struct node *lch,*rch;
10 };
11
12 int count_leaf(node* tree);//统计叶子结点
13 int count_deep(node* tree);//统计树的深度
14 void create_tree(char* l,char* r,int i,int j,int e,int f,node** tree);//由先序遍历序列和中序遍历序列恢复二叉树
15
16 int main()
17 {
18     //freopen("D:\\input.in","r",stdin);
19     //freopen("D:\\output.out","w",stdout);
20     node *tree;21     char pre[]="ABDGCEF";
22     char in[]="DGBAECF";
23     create_tree(pre,in,0,6,0,6,&tree);
24     cout<<count_leaf(tree)<<endl;
25     cout<<count_deep(tree)<<endl;
26     return 0;
27 }
28 int count_leaf(node* tree)
29 {
30     if(tree==NULL)  return 0;
31     if(tree->lch==NULL&&tree->rch==NULL)    return 1;
32     return count_leaf(tree->lch)+count_leaf(tree->rch);
33 }
34 int count_deep(node* tree)
35 {
36     if(tree==NULL)  return 0;
37     return 1+max(count_deep(tree->lch),count_deep(tree->rch));
38 }
39 void create_tree(char* l,char* r,int i,int j,int e,int f,node** tree)
40 {
41     int m;
42     (*tree)=new node;
43     (*tree)->c=l[i];
44     m=e;
45     while(r[m]!=l[i])    m++;
46     if(m==e)    (*tree)->lch=NULL;
47     else    create_tree(l,r,i+1,i+m-e,e,m-1,&(*tree)->lch);
48     if(m==f)    (*tree)->rch=NULL;
49     else    create_tree(l,r,i+m-e+1,j,m+1,f,&(*tree)->rch);
50 }

由先序遍历序列和中序遍历序列恢复二叉树以及统计叶子节点个数和树的深度...相关推荐

  1. 求树的遍历、树的叶子节点个数、树的高度、copy树

    1 #include<iostream> 2 3 using namespace std; 4 5 typedef struct Treenode 6 { 7 Treenode* left ...

  2. 二叉树(C++):创建,前中后序遍历(递归+非递归),获取叶子节点个数,获取树的高度

    文章目录 前言 创建二叉树 先序遍历 中序遍历 后序遍历 获取叶子节点个数 获取树的高度 测试代码 前言 现有如下二叉树: 关于二叉树的相关操作,我们能够发现二叉树从根节点到子节点,以及每个中间节点基 ...

  3. (数据结构)1.实现二叉树的各种基本运算的算法2.实现二叉树的各种遍历算法3. 由遍历序列构造二叉树4.求二叉树中的结点个数、叶子节点个数、某结点层次和二叉树宽度

    实验内容 1.假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储.设计一个算法,计算一棵给定二叉树b中的所有单分支结点个数. 2.假设二叉树中的每个结点值为单个字符,采用二叉链存储结构存储.设 ...

  4. PAT甲级1020 Tree Traversals:[C++题解]树的遍历、由中序序列和后序序列递归建树

    文章目录 题目分析 题目链接 题目分析 题意重述:给定一棵二叉树的后序遍历序列和中序遍历序列,让求层次遍历的序列. 分析: 后序遍历:先 左子树.右子树 ,最后再遍历根结点. 中序遍历:先左子树,再根 ...

  5. 二叉树(前序遍历序列、中序遍历序列、后序遍历序列、层次遍历序列、深度、叶子数)

    Description 已知二叉树的一个按前序遍历输入的字符序列,如abc,de,g,f, (其中,表示空结点).请建立二叉树,并输出建立二叉树的前序遍历序列.中序遍历序列.后序遍历序列.层次遍历序列 ...

  6. 由序列确定二叉树:前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 代码实现(c语言)

    下面三种序列可以唯一的构造唯一的一棵二叉树: 前序序列和中序序列构造二叉树 后序序列和中序序列构造二叉树 层次遍历序列和中序遍历序列构造二叉树 #include<stdio.h> #inc ...

  7. 由前序序列与中序序列实现后序遍历

    二叉树是一种特殊的树,二叉树只有两个分支,分别是该节点的左儿子和右儿子. 前序遍历:就是先遍历根节点,然后再访问左子树与右子树.遍历子树的时候同样也是先遍历根节点然后在遍历他的左子树与右子树. 中序遍 ...

  8. 用数学归纳法证明二叉树的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树

    用数学归纳法证明二叉树的先序遍历序列和中序遍历序列可以唯一确定一颗二叉树. 首先说明:思想来自文都考研洪老师.包括逻辑框架的搭建,此篇文章为框架搭建完成后将细节补充完整. 首先,用到的数学的证明思想是 ...

  9. 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

    1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...

  10. PAT甲级1043 Is It a Binary Search Tree :[C++题解]判断二叉搜索树BST、给定前序序列和中序序列

    文章目录 题目分析 题目链接 题目分析 二叉搜索树(BST):左子树小于根结点,右子树大于等于根结点. 二叉搜索树的中序遍历一定是有序序列.所谓中序遍历:先访问左子树,再访问根结点,最后访问右子树. ...

最新文章

  1. 200页!分享珍藏很久的Python学习知识手册(附链接)
  2. mysql存储过程或函数中传入参数与表字段名相同引发的悲剧
  3. CentOS7开放端口号
  4. pythonsearch结果_python 查询Elasticsearch的小例子
  5. 谈论源码_为什么每个人都在谈论WebAssembly
  6. Smart ORM v0.3发布(完全面向对象的轻量级ORM工具)
  7. 数据科学入门的5个技巧
  8. 批量复制或提取CAD中的说明文字为表格
  9. 【数字图像处理】基于SeetaFace2的人脸检测
  10. Unity实现2D小游戏
  11. 页面置换算法 (全)
  12. 百度指数Cipher-text加密
  13. 切西瓜(空间划分问题)
  14. CSS实现反方向圆角
  15. Flutter高仿微信-第51篇-群聊-修改群名
  16. 如何挽救婚姻?不想离婚就做好这8个方面,分分钟留下她
  17. Spring项目中,为什么要区分PO对象,VO对象,DTO对象?有什么作用?
  18. matlab——红绿灯颜色及数字识别(一)
  19. 教程丨一文入门图像预训练模型
  20. 精通Java并发——张龙

热门文章

  1. python用小矩形标记数据点_Python – 在散点处绘制已知大小的矩形
  2. 最新如何解决git 输入github时每次都要输入用户名和密码问题
  3. 政府机构网络安全实战
  4. Raki的读paper小记:PURE:A Frustratingly Easy Approach for Entity and Relation Extraction
  5. 《Web漏洞防护》读书笔记——第2章,SQL注入防护
  6. java反射 泛型类型_【译】9. Java反射——泛型
  7. ed是什么梗_《JOJO的奇妙冒险》那些梗
  8. python 精度计算 性能_Python 优化存储和精度
  9. LeetCode 翻转字符串里的单词
  10. LeetCode--Longest Common Prefix