需实现:(1)输出二叉树b的节点个数

(2)输出二叉树b的叶子节点个数

(3)求二叉树b中指定节点值(假设所有节点值不同)的节点的层次。

(4)利用层次遍历求二叉树b的宽度

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
const int MaxSize=10000;
using namespace std;
typedef struct node
{char data;struct node * lchild;struct node * rchild;
}BTNode;
typedef struct qnode
{BTNode *data;struct qnode *next;
}DataNode;
typedef struct
{int Size;DataNode *front;DataNode *rear;
}SqQueue;
void InitQueue(SqQueue * &q)
{q=(SqQueue *)malloc(sizeof(SqQueue));q->front=q->rear=NULL;q->Size=0;
}
bool QueueEmpty(SqQueue *q)
{return (q->rear==NULL);
}
void enQueue(SqQueue * &q,BTNode *e)
{DataNode *p;p=(DataNode *)malloc(sizeof(DataNode));p->data=e;p->next=NULL;if(q->rear==NULL)q->front=q->rear=p;else{q->rear->next=p;q->rear=p;}q->Size++;
}
bool deQueue(SqQueue * &q,BTNode * &e)
{DataNode * t;if(q->rear==NULL)return false;t=q->front;if(q->front==q->rear)q->front=q->rear=NULL;elseq->front=q->front->next;e=t->data;free(t);q->Size--;return true;
}
int QueueSize(SqQueue * q)
{return q->Size;
}
void CreatBTree(BTNode * &b,char * str)         //建立二叉树
{BTNode *St[MaxSize],*p;int top=-1,k,j=0;char ch;b=NULL;ch=str[j];while(ch!='\0'){switch(ch){case '(':top++;St[top]=p;k=1;break;case ')':top--;break;case ',':k=2;break;default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)b=p;else{switch(k){case 1:St[top]->lchild=p;break;case 2:St[top]->rchild=p;break;}}}j++;ch=str[j];}
}
int yznum;
char yz[MaxSize];
void YZjiedian(BTNode *b)    //找叶子节点的个数
{if(b!=NULL){if(b->lchild==NULL&&b->rchild==NULL) {yznum++;yz[yznum]=b->data;}YZjiedian(b->lchild);YZjiedian(b->rchild);}
}
int jdnum;
char jd[MaxSize];
void JieDian(BTNode *b)      //找节点的个数
{if(b!=NULL){jdnum++;jd[jdnum]=b->data;JieDian(b->lchild);JieDian(b->rchild);}
}
void PreOrder(BTNode *b)       //先序遍历
{if(b!=NULL){printf("%c ",b->data);PreOrder(b->lchild);PreOrder(b->rchild);}
}
void InOrder(BTNode *b)      //中序遍历
{if(b!=NULL){InOrder(b->lchild);printf("%c ",b->data);InOrder(b->rchild);}
}
void PostOrder(BTNode *b)       //后序遍历
{if(b!=NULL){PostOrder(b->lchild);PostOrder(b->rchild);printf("%c ",b->data);}
}
int result;
void LevelOrder(BTNode *b)         //求二叉树的最大宽度
{BTNode *nape;nape=b;int cnt;BTNode *p;SqQueue *qu;InitQueue(qu);enQueue(qu,b);while(!QueueEmpty(qu)){cnt=QueueSize(qu);result=max(result,cnt);while(cnt--){deQueue(qu,p);if(p->lchild!=NULL)enQueue(qu,p->lchild);if(p->rchild!=NULL)enQueue(qu,p->rchild);}}
}
int FindJieDian(BTNode *b,char c)    //寻找节点层次
{BTNode *nape;nape=b;int cnt;int level=0;BTNode *p;SqQueue *qu;InitQueue(qu);enQueue(qu,b);while(!QueueEmpty(qu)){cnt=QueueSize(qu);level++;while(cnt--){deQueue(qu,p);if(p->data==c)return level;if(p->lchild!=NULL)enQueue(qu,p->lchild);if(p->rchild!=NULL)enQueue(qu,p->rchild);}}return -1;
}
int main()
{char str[MaxSize]={"A(B(D,E(H(J,K(L,M(,N))),)),C(F,G(,I)))"};printf("此棵二叉树为:%s\n",str);BTNode *b;CreatBTree(b,str);JieDian(b);printf("此二叉树的结点个数为:%d\n",jdnum);printf("此二叉树的节点为:");for(int i=1;i<=jdnum;i++)printf(" %c",jd[i]);printf("\n");printf("先序遍历输出节点为:");PreOrder(b);printf("\n");printf("中序遍历输出节点为:");InOrder(b);printf("\n");printf("后序遍历输出节点为:");PostOrder(b);printf("\n");YZjiedian(b);printf("此二叉树的叶子结点个数为:%d\n",yznum);printf("此二叉树的叶子节点为:");for(int i=1;i<=yznum;i++)printf(" %c",yz[i]);printf("\n");LevelOrder(b);printf("此二叉树的最大宽度为:%d\n",result);char ch;while(printf("请输入你要查询的节点:")!=EOF){scanf(" %c",&ch);int nape=FindJieDian(b,ch);if(nape==-1)printf("二叉树中无此节点\n");elseprintf("节点%c在二叉树中的层数为:%d\n",ch,nape);}return 0;
}

实现图片:

求二叉树节点个数、叶子节点、节点层次与宽度相关推荐

  1. 求二叉树第K层的节点个数+求二叉树叶子节点的个数

    size_t _FindLeafSize(Node* root)     //求二叉树叶子节点的个数     {         //static size_t count = 0;          ...

  2. 数据结构之求二叉树的所有叶子和以及叶子总数

    1.题目 数据结构之求二叉树的所有叶子和以及叶子总数         2.代码实现 tree.java package leetcode.chenyu.test;public class Tree { ...

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

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

  4. c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...

    技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完. 目前我选择C语言,Python和Java作为实现语言,因为这三种 ...

  5. 求二叉树中任意两个节点的最近公共祖先节点

    思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先. 如果都不匹配,则分别递归左.右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树 ...

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

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

  7. 给定一棵二叉树,计算该二叉树的深度、总节点个数和叶子节点个数。

    // // binary_tree.cpp // BinaryTreeApp // // Created by ljpc on 2018/5/3. // Copyright © 2018年 ljpc. ...

  8. 常见数据结构——完全二叉树(定义、特征、节点个数的判断以及C++简单实现)

    完全二叉树 完全二叉树 1.定义 2.特征 3.C++简单实现完全二叉树的节点个数 完全二叉树 1.定义 完全二叉树是由满二叉树而引出来的,若设二叉树的深度为h,除第 h 层外,其它各层 (1-h-1 ...

  9. 求二叉树b的结点个数、叶子结点个数

    #include"tree.cpp" //包含了二叉树的基本算法/*-------- 求二叉树b的结点个数.叶子结点个数 ---------*///求二叉树b的结点个数 int N ...

  10. 代码实现求二叉树结点数和叶子结点数(C语言)

    本篇会用到之前讲过的二叉树三种遍历方法的代码实现,当然这里还会再写一遍,可以先去看这篇博客二叉树的概念及三种遍历方法(C语言)_Perfectkn的博客-CSDN博客 目录 两种方法求二叉树结点总个数 ...

最新文章

  1. Making Your Own iPhone Frameworks. In Xcode
  2. iOS 总结遇到的各种坑儿
  3. 1000 qps java,什么是QPS?
  4. 【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 8.)(笔记)一元运算符正负(+,-)
  5. 最新开源JavaScript 图表库 ECharts推荐
  6. acegis连接使用方法_铝型材配件间隔连接块的分类与使用方法
  7. clob oracle 连接_32天 Oracle 导入导出.
  8. 七月算法机器学习 8 信息论、最大熵模型与EM算法
  9. 【数据结构初阶-oj】入门二叉树的入门oj
  10. python chardet_chardet
  11. 在 360 度绩效评估中应该问的 20 个问题
  12. 【必知必会的MySQL知识】②使用MySQL
  13. 域控中同一计算机名字,更改域控的计算机名
  14. 不优雅地解决pytorch模型测试阶段显存溢出问题
  15. RLC交流电路测量实验
  16. loopback address 回送地址
  17. node child_process模块学习笔记
  18. GAT 算法原理介绍与源码分析
  19. python 趋势线计算式_LLT指标-低延迟趋势线对中证500的python复现过程
  20. 四层电梯西门子S7-200PLC梯形图程序

热门文章

  1. php mysql5.7.110安装教程_MYSQL教程mysql5.7.19 winx64安装配置方法图文教程(win10)
  2. 睡眠周期时长测试软件,“智能时钟”测睡眠周期 最佳时候叫醒你
  3. Python super 函数 - Python零基础入门教程
  4. java mysql order by,java-使用LIMIT和MySQL进行ORDER BY
  5. unix系统编码 java_JAVA字符编码系列三:Java应用中的编码问题
  6. 自动清理mysql的lock进程的脚本_自动清理MySQL的Lock进程的脚本
  7. java欧冠抽签,欧冠抽签吐槽:最大的“礼包”被C罗拿走!梅西出局概率超50%?...
  8. 台式计算机驱动程序未被安装,电脑未能成功安装设备驱动程序怎么办
  9. python数据算法有哪些_python算法与数据结构-常用查找算法一(37)
  10. 浙江高校计算机等级考试二级办公,浙江省高校计算机等级考试二级(高级办公)Word操作提示.doc...