二叉树层次遍历算法的验证

/*
* 问题描述: 实现二叉树的层次遍历算法,并对用”a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i)))”创建的二叉树进行测试。
* 输入描述:无需输入
* 程序输出:实现各种算法的函数的测试结果
*/
view plain copy
#include
#include btree.h
void levelorder(btnode *b)
{
btnode *p;
//环形队列采用顺序队存储结构
btnode *qu[maxsize]; //定义环形队列,存放节点指针
int front,rear; //定义队头和队尾指针
front=rear=-1; //置队列为空队列
rear++;
qu[rear]=b; //根节点指针进入队列
while (front!=rear) //队列不为空
{
front=(front+1)%maxsize;
p=qu[front]; //队头出队列(出队结点p)
printf(%c ,p->data); //访问节点
if (p->lchild!=null) //有左孩子时将其进队
{
rear=(rear+1)%maxsize;
qu[rear]=p->lchild;
}
if (p->rchild!=null) //有右孩子时将其进队
{
rear=(rear+1)%maxsize;
qu[rear]=p->rchild;
}
}
}
int main()
{
btnode *b;
createbtnode(b,a(b(d,e(h(j,k(l,m(,n))))),c(f,g(,i))));
printf(二叉树b: );
dispbtnode(b);
printf(\n);
printf(层次遍历序列:\n);
levelorder(b);
destroybtnode(b);
return 0;
}
[cpp] view plain copy
#ifndef btree_h_included
#define btree_h_included
#define maxsize 100
typedef char elemtype;
typedef struct node
{
elemtype data; //数据元素
struct node *lchild; //指向左孩子
struct node *rchild; //指向右孩子
} btnode;
void createbtnode(btnode *&b,char *str); //由str串创建二叉链
btnode *findnode(btnode *b,elemtype x); //返回data域为x的节点指针
btnode *lchildnode(btnode *p); //返回*p节点的左孩子节点指针
btnode *rchildnode(btnode *p); //返回*p节点的右孩子节点指针
int btnodedepth(btnode *b); //求二叉树b的深度
void dispbtnode(btnode *b); //以括号表示法输出二叉树
void destroybtnode(btnode *&b); //销毁二叉树
#endif // btree_h_included
view plain copy
#include
#include
#include btree.h
void createbtnode(btnode *&b,char *str) //由str串创建二叉链
{
btnode *st[maxsize],*p=null;
int top=-1,k,j=0;
char ch;
b=null; //建立的二叉树初始时为空
ch=str[j];
while (ch!='\0') //str未扫描完时循环
{
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) //p指向二叉树的根节点
b=p;
else //已建立二叉树根节点
{
switch(k)
{
case 1:
st[top]->lchild=p;
break;
case 2:
st[top]->rchild=p;
break;
}
}
}
j++;
ch=str[j];
}
}
btnode *findnode(btnode *b,elemtype x) //返回data域为x的节点指针
{
btnode *p;
if (b==null)
return null;
else if (b->data==x)
return b;
else
{
p=findnode(b->lchild,x);
if (p!=null)
return p;
else
return findnode(b->rchild,x);
}
}
btnode *lchildnode(btnode *p) //返回*p节点的左孩子节点指针
{
return p->lchild;
}
btnode *rchildnode(btnode *p) //返回*p节点的右孩子节点指针
{
return p->rchild;
}
int btnodedepth(btnode *b) //求二叉树b的深度
{
int lchilddep,rchilddep;
if (b==null)
return(0); //空树的高度为0
else
{
lchilddep=btnodedepth(b->lchild); //求左子树的高度为lchilddep
rchilddep=btnodedepth(b->rchild); //求右子树的高度为rchilddep
return (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1);
}
}
void dispbtnode(btnode *b) //以括号表示法输出二叉树
{
if (b!=null)
{
printf(%c,b->data);
if (b->lchild!=null || b->rchild!=null)
{
printf(();
dispbtnode(b->lchild);
if (b->rchild!=null) printf(,);
dispbtnode(b->rchild);
printf());
}
}
}
void destroybtnode(btnode *&b) //销毁二叉树
{
if (b!=null)
{
destroybtnode(b->lchild);
destroybtnode(b->rchild);
free(b);
}
}
运行结果:

石墨烯电池汽车有哪些厂家
应用非隔离直流-直流转换器设计提高转换效率
呼吸管路气流阻力测试仪
智能指纹锁家用要注意三个问题
基于区块链物的可信任交易与交互平台COT介绍
二叉树层次遍历算法的验证
半导体存储器的介绍与分类
常见的三种网络存储
Molex推出PoE+PSE单端口磁力连接座85759
sql where条件的执行顺序
飞利浦发布旗舰显示器 支持面部识别和Type-C
基于平面混合超构光学的微型彩色相机
日本为加强与美国的太空合作,将驻兵美基地
超级电容器充电器平衡有关探讨
最新传感器:几秒内科检测大脑多巴胺含量
碳化硅技术的挑战与未来展望
蒸汽拖把什么牌子好,清洁达人首选了这几款
三星Galaxy Z Flip正式登陆中国市场售价为11999元起
区块链是怎样来赚钱的
造成缺芯的原因有哪些