二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树,采用先进先出的队列。
来源:互联网 发布:张家界导游软件app 编辑:程序博客网 时间:2024/06/03 10:16
#include<stdio.h>
#include<stdlib.h>
typedef struct biTree { //二叉树结构
char data1;
struct biTree *lchild,*rchild;
}biTree,*linkbiTree;
typedef struct qNode { //链式队列类型
biTree data2;
struct qNode *next;
}qNode,*queuePtr;
typedef struct { //队列指针
queuePtr front;
queuePtr rear;
}linkQueue;
void initQueue(linkQueue &Q) { //队列初始化
Q.front = Q.rear =(queuePtr)malloc(sizeof(qNode));
if(! Q.front)
return;
Q.front->next = NULL;
}
void destroyQueue(linkQueue &Q) { //销毁队列
while(Q.front) {
Q.rear = Q.front->next;
free(Q.front);
}
}
void enQueue(linkQueue &Q,linkbiTree ptr) { //如入队列
queuePtr p;
p = (queuePtr)malloc(sizeof(qNode));
if(!p)
return;
(p->data2).data1 = ptr->data1;
(p->data2).lchild = ptr->lchild;
(p->data2).rchild = ptr->rchild;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
void deQueue(linkQueue &Q,biTree &ptr) { //出队列
queuePtr p;
if(Q.front == Q.rear)
return;
p = Q.front->next;
ptr.data1 = (p->data2).data1;
ptr.lchild = (p->data2).lchild;
ptr.rchild = (p->data2).rchild;
Q.front->next = p->next;
if(Q.rear == p)
Q.rear = Q.front;
free(p);
}
int queueEmpty(linkQueue &Q) { //判空
if(Q.front == Q.rear)
return 1;
return 0;
}
int levedOrderTraverse(linkbiTree &bt) { //层次遍历二叉树,当出现空之后,后面不能出现出现节点,否则不是完全二叉树。
linkQueue Q;
int flag = 0;
biTree p;
if(bt) {
initQueue(Q);
enQueue(Q,bt);
while(!queueEmpty(Q)) {
deQueue(Q,p);
printf("%c\n",p.data1);
if(!(p.data1))
flag =1;
else if(flag)
return 0;
else{
enQueue(Q,p.lchild);
enQueue(Q,p.rchild);
}
}
}
return 1;
}
void creatbiTree(linkbiTree &bt) { //线序法建立二叉树,空节点也存入
char ch;
ch = getchar();
if(ch =='#') {
bt = (linkbiTree)malloc(sizeof(biTree));
bt->data1 = NULL;
}
else {
bt = (linkbiTree)malloc(sizeof(biTree));
bt->data1 = ch;
creatbiTree(bt->lchild);
creatbiTree(bt->rchild);
}
}
int main() {
linkbiTree bt;
int flag;
creatbiTree(bt);
flag = levedOrderTraverse(bt);
if(flag)
printf("ok\n");
else
printf("error\n");
return 0;
}
0 0
- 二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树,采用先进先出的队列。
- 二叉树采用二叉链表存储,复制二叉树的算法(树的应用)
- 采用二叉链表作为二叉树的存储结构
- 数据结构--二叉树--按给定的先序序列建立二叉链表(二叉树的存储)
- 二叉树系列---判断给定的二叉树是否为二叉查找树
- 二叉树采用二叉链表结构表示。设计并实现如下算法:输入某棵二叉树的广义表形式,建立该二叉树,并按层次遍历该二叉树。
- 判断是否完全二叉树
- 二叉树的二叉链表存储
- 完全二叉树的判断
- 完全二叉树的判断
- 完全二叉树的判断
- 完全二叉树的判断
- 以二叉链表的方式创建一棵二叉树,并以非递归算法中序输出;计算二叉树的繁茂度,并判断二叉树是否为完全二叉树
- 我写的二叉树(采用了三叉链表)
- 本例是采用一般的队列来存储和访问二叉树
- 设计一个算法,判断一个二叉树是否为完全二叉树
- 二叉树(二) 求二叉树高度,根据先序和中序构建二叉树,判断二叉树是否是完全二叉树,判断两棵树是否相等
- 判断给定的二叉树是否为二分查找树
- C++:virtual关键字
- python3 + selenium3 web自动化测试环境搭建
- widows scp file to linux
- 对集合框架的理解
- 音视频处理-图像格式-jpeg
- 二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树,采用先进先出的队列。
- Python建立简易语音识别系统
- 一些知识概念,十进制、八进制和二进制转换
- 无名管道的使用
- HDU1789 Doing Homework again 贪心
- codeforces 715B. Complete The Graph
- Oracle 数据库导出全库(包含空表)
- 螺旋矩阵
- JS正则中test方法