数据结构之树的层次遍历(附带查找)、深度求值
2017-06-30 22:12
465 查看
二叉树的层次遍历,顾名思义就是指从二叉树的第一层(根节点)开始,从上至下逐层遍历,在同一层中,则按照从左到右的顺序对节点逐个访问。
算法思想:用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。
在进行层次遍历的时候,设置一个队列结构,遍历从二叉树的根节点开始,首先将根节点指针入队列,然后从队头取出一个元素,每取一个元素,执行下面两个操作:
1、访问该元素所指向的节点
2、若该元素所指节点的左右孩子节点非空,则将该元素所指节点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束。
代码
注意:0代表的是NULL
使用说明:本代码,含有levelprint函数,可以层次打印,顺便查找一下关键值。bitreedepth函数计算二叉树的深度,使用的是递归的思想。
总结
本次实验的目的是二叉树的应用,树的深度求值使用递归不算复杂。对于一个无序二叉树而言,层次遍历可以做到对无序二叉树的查找,当然,递归应该也是可以的,但我没有做出来,下次有机会再来好好探究一下。
算法思想:用一个队列保存被访问的当前节点的左右孩子以实现层序遍历。
在进行层次遍历的时候,设置一个队列结构,遍历从二叉树的根节点开始,首先将根节点指针入队列,然后从队头取出一个元素,每取一个元素,执行下面两个操作:
1、访问该元素所指向的节点
2、若该元素所指节点的左右孩子节点非空,则将该元素所指节点的左孩子指针和右孩子指针顺序入队。此过程不断进行,当队列为空时,二叉树的层次遍历结束。
代码
#include<stdio.h> #include<malloc.h> #define max 100 typedef struct tree { char data; struct tree*lchild; struct tree*rchild; }bitree; bitree*creat() { bitree*t; t=(bitree*)malloc(sizeof(bitree)); char a; if((a=getchar())=='0') t=NULL; else { t->data=a; t->lchild=creat(); t->rchild=creat(); } return t; } void print(bitree*t) { if(t!=NULL) { printf("%c",t->data); if(t->lchild!=NULL||t->rchild!=NULL) { printf("("); print(t->lchild); if(t->rchild!=NULL) printf(","); print(t->rchild); printf(")"); } } } int bitreedepth(bitree*t) { int ldep,rdep; if(t==NULL) return 0; else { ldep=bitreedepth(t->lchild); rdep=bitreedepth(t->rchild); if(ldep>rdep) return ldep+1; else return rdep+1; } } int levelprint(bitree*t,char x) { int flag=0; bitree*q[max]; int front=-1,rear=0; if(t==NULL) return 0; q[rear]=t; while(front!=rear) { front++; printf("%c",q[front]->data); if(q[front]->data==x) flag=1; if(q[front]->lchild!=NULL) { rear++; q[rear]=q[front]->lchild; } if(q[front]->rchild!=NULL) { rear++; q[rear]=q[front]->rchild; } } return flag; } int main() { bitree*t; printf("input the bitree:"); t=creat(); putchar('\n'); print(t); int c=bitreedepth(t); printf("\nthe bitree depth:%d",c); fflush(stdin); char a; printf("\nyou want to find:");scanf("%c",&a); int b; b=levelprint(t,a); if(b) puts("\nyou get it"); else puts("\nyou don't get it"); free(t); return 0; }
注意:0代表的是NULL
使用说明:本代码,含有levelprint函数,可以层次打印,顺便查找一下关键值。bitreedepth函数计算二叉树的深度,使用的是递归的思想。
总结
本次实验的目的是二叉树的应用,树的深度求值使用递归不算复杂。对于一个无序二叉树而言,层次遍历可以做到对无序二叉树的查找,当然,递归应该也是可以的,但我没有做出来,下次有机会再来好好探究一下。
相关文章推荐
- 数据结构(一)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构——图的遍历——邻接矩阵 深度优先遍历《递归》和《非递归》
- 数据结构之二叉树(遍历、建立、深度)
- 【数据结构与算法】图的深度与广度遍历
- 寒假训练--树与二叉树--数据结构实验之求二叉树后序遍历和层次遍历
- 数据结构实验之求二叉树后序遍历和层次遍历
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构之二叉树(遍历、建立、深度)
- 数据结构图的数组表示法以及深度,广度遍历
- 数据结构之 二叉树的构造与遍历(先序,中序,后序,层次)