二叉树的遍历与深度和节点数的计算代码实现
来源:互联网 发布:企业数据安全 编辑:程序博客网 时间:2024/05/16 12:48
二叉树有前序(中左右)中序(左中右)后序(左右中)三种方式。
可用递归的思路加上链表实现二叉树的创建与遍历。
#include<iostream>#include<malloc.h>using namespace std;typedef struct node{char data;struct node*left;struct node*right;}Node,*jnode;jnode creat(jnode &t)//创建二叉树; {char a;cin>>a;if(a=='#'){t=NULL;}else{t=(jnode)malloc(sizeof(node));t->data=a;t->left=creat(t->left);t->right=creat(t->right);}return t;//????? }void qianxu(jnode &t)//前序遍历二叉树; {if(t){cout<<t->data;qianxu(t->left);qianxu(t->right); }}void zhongxu(jnode &t)//中序遍历二叉树; { if(t) { zhongxu(t->left); cout<<t->data; zhongxu(t->right); }} void houxu(jnode &t){if(t){houxu(t->left);houxu(t->right);cout<<t->data;} } int shendu(jnode &t)//找出二叉树的深度; { int sum=0,depthl,depthr; if(t==NULL){ return 0;}else{depthl=shendu(t->left);depthr=shendu(t->right);sum=1+(depthl>depthr?depthl:depthr);}return sum; } int jiedian(jnode &t)//计算二叉树的节点数; { int sum=0,m,n;if(t){ if(!t->left&&!t->right) { sum++; } else { m=jiedian(t->left); sum+=m; n=jiedian(t->right); sum+=n; }}return sum; } int main(){cout<<"请输入二叉树:\n"; jnode t;t=creat(t);cout<<"输出前序遍历结果\n";qianxu(t);cout<<endl;cout<<"输出中序遍历结果\n";zhongxu(t);cout<<endl;cout<<"输出后序遍历结果\n"; houxu(t);cout<<endl;int m=shendu(t);cout<<"输出二叉树的深度\n";cout<<m<<endl;cout<<"输出二叉树的节点数\n";int l=jiedian(t);cout<<l<<endl;return 0;}
普通的二叉树,节点只需包含三个域,即储存元素的data,储存左右指针的指向节点的指针lchild,rchild。
创建二叉树时同样用到递归,思路是将一棵不完整的二叉树补充完整,空缺的左孩子或有孩子用#做标记,同时令此时的左孩子或有孩子的父节点的左指针或有指针为NULL。即找到了每一次递归结束的标志。
前中后序遍历时的递归,每一次递归转向上一次递归的条件即其左右指针都为空。
0 0
- 二叉树的遍历与深度和节点数的计算代码实现
- 二叉树的先序建立、遍历、镜像、节点数、深度的具体代码实现
- 二叉树的创建、遍历、深度、叶子节点数
- 二叉树的字符串创建和遍历,求深度,叶子节点数
- 二叉树的遍历 深度 与叶子节点
- 二叉树定义及相关术语、节点数计算公式、代码实现(遍历,Java版)
- 八.二叉树各种操作的C语言实现 深度遍历求深度,广度遍历求深度,交换左右子树,求叶子节点数
- 二叉树的深度和分支节点数
- 二叉树的深度和叶子节点数
- 递归实现 满二叉树的节点数计算
- 【数据结构】二叉树的实现(如:默认成员函数、(叶子)节点数、深度、四种遍历)
- 二叉树的实现和二叉数的遍历实现
- 计算二叉树的高度、节点数、叶子节点数
- 基本数据结构——二叉树的建立,遍历,求叶子节点,深度计算
- 二叉树的节点数和二叉树的叶子节点书和二叉树的深度
- java实现二叉树的建立,前中后序遍历,层次遍历,深度,节点个数等
- 二叉树的创建,遍历,叶节点数,总结点数,深度
- 与二叉树有关的一些操作:先序,中序,后序,层次遍历,计算深度,叶结点数
- MATLAB 函数 mesh()用法
- windows下安装numpy+mtk,scipy,python_speech_features
- 搭建git服务器——小组级别
- Unity3D - 导航网格自动寻路(Navigation Mesh)
- el表达式
- 二叉树的遍历与深度和节点数的计算代码实现
- 安卓NDK开发-实现图片的高效压缩
- 手机验证码
- break or continue java 8 stream lambda foreach(loop)
- [C++杂谈——effective C++略读]C++的构造、析构和赋值
- Transaction Isolation Level
- nyoj771密钥解密
- 1079. Total Sales of Supply Chain
- mac python链接数据库