基于二叉链表的二叉树结点个数的统计

描述
设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0、1、2)个数进行统计。

输入
多组数据。每组数据一行,为二叉树的前序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。

输出
每组数据输出一行,每行三个数分别为二叉树的度为0、1、2的结点个数。每两个数用空格分隔。

样例输入1 复制
abcd00e00f00ig00h00
abd00e00cf00g00
0
样例输出1
5 0 4
4 0 3

代码的思想我用图来解释一下
查找度为2的结点

#include<iostream>
using namespace std;typedef struct binode
{char data;binode *lchild,*rchild;
}*bitree;void create(bitree &T)
{char ch;cin>>ch;if(ch=='0')T=NULL;else{T=new binode;T->data=ch;create(T->lchild);create(T->rchild);}
} int N0(bitree &T)//叶子
{if(T==NULL)//空树返回0 return 0;else if(T->lchild==NULL && T->rchild==NULL)//叶子返回1 return (1+N0(T->lchild)+N0(T->rchild));     else return (N0(T->lchild)+N0(T->rchild));
}int N1(bitree &T)//度为1
{if(T==NULL)//空树返回0 return 0;else if((T->lchild!=NULL && T->rchild==NULL) || (T->lchild==NULL && T->rchild!=NULL))return (1+N1(T->lchild)+N1(T->rchild));       else return (N1(T->lchild)+N1(T->rchild));
}int N2(bitree &T)//度为2
{if(T==NULL)//空树返回0 return 0;else if((T->lchild!=NULL) && (T->rchild!=NULL))return (1+N2(T->lchild)+N2(T->rchild));       else return (N2(T->lchild)+N2(T->rchild));
}int main()
{while(1){bitree T;create(T);if(T==NULL)break;cout<<N0(T)<<" ";cout<<N1(T)<<" ";cout<<N2(T)<<endl;}return 0;
}

【数据结构】基于二叉链表的二叉树结点个数的统计相关推荐

  1. 3009基于二叉链表的二叉树结点个数的统计(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元 ...

  2. 3006基于二叉链表的二叉树最长路径的求解(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...

  3. 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)

    基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...

  4. 3010基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  5. 3003基于二叉链表的二叉树左右子树的交换

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...

  6. 基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  7. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)

    以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...

  8. 3004基于二叉链表的二叉树的双序遍历(附题意解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...

  9. 3008基于二叉链表的二叉树的遍历(附可能的WA解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序.中序和后序遍历. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时 ...

最新文章

  1. python协程异步原理_简单介绍Python的Tornado框架中的协程异步实现原理
  2. php请求来源,如何用PHP获取请求的来源?
  3. php事件和行为,Yii框架组件和事件行为管理详解
  4. vb6 combo根据index显示_VB6.0软件安装教程及学习资源
  5. 回文数的个数、杨辉三角
  6. JAVA程序设计----IO流(下)
  7. 摄像头自动曝光相关基础知识
  8. 使用fuse.js_如何使用Fuse.js将搜索添加到React应用
  9. 黑科技之后迎来“小仙女”!小米官宣全新手机系列CC
  10. gradle依赖冲突的解决方式
  11. 向模块化进军,创建类
  12. 长春技师学院计算机专业,中专院校 / 中专技校 / 长春市技师学院
  13. Unity | 安卓 读取和写入TXT文本操作
  14. 计算机怎么写入院记录,住院病历书写范文
  15. 金盾2016视频加密器修改播放器多机播放遇到的问题
  16. 我的CSDN博客文章,被大学老师、本科生、公司 “引用“ 了!
  17. Etcd——大厂面试问题集合
  18. 详解mmap:是什么 为什么 怎么用
  19. 2022年全国PMP考试地点汇总,你都知道吗?
  20. Python每日练习

热门文章

  1. linux主机邮件提醒,Linux用户登陆邮件提醒功能怎么设置?
  2. 对颈椎减肥肠胃有利的瑜伽姿势总结
  3. matlab多参数优化问题,Levenberg-Marquardt 算法进行多参数模型优化问题
  4. 安装scoop报错:iex : 使用“2”个参数调用“DownloadFile”时发生异常:“在 WebClient 请求期间发生异常。”
  5. 二叉树的层序创建和层序遍历(c++,c)
  6. win7 x64上安装VirtualBox,提示不能为虚拟电脑打开一个新任务
  7. 泛联新安:冲破“门槛”助力科技自立自强
  8. XGBoost论文阅毕
  9. 简单粗暴解决”依赖服务或组件无法启动“,电脑无法上网的问题!
  10. C 语言规定 程序中各函数之间( ),C语言规定,程序中各函数之间( )