毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的

Posted 多情剑客无情剑;

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的相关的知识,希望对你有一定的参考价值。

//代码进过测试,直接可以拿来用
//关键就是那一点未透——队列。
// 关键就是一个出队,一个入队操作。
#include<iostream> #include<stdio.h> #include<stack> #include<queue> #include<malloc.h> # define MaxSize 100 using namespace std; //二叉树结点 typedef struct BTNode{ char data; struct BTNode *lchild; struct BTNode *rchild; }BTNode; //先序建立二叉树,大话p187,教科书吧版 BTNode *CreateBiTree()//只需要一个函数 { char ch; BTNode *T; scanf("%c",&ch); if(ch==#) T=NULL; else { T = (BTNode *)malloc(sizeof(BTNode)); T->data = ch; T->lchild = CreateBiTree(); T->rchild = CreateBiTree(); } return T;//返回根节点 } //底层借助了qu[MaxSize]这个循环数组实现了算法 void LevelOrder(BTNode *T) { BTNode *p; //定义工作指针p BTNode *qu[MaxSize]; //定义环形队列,存放节点指针 int front,rear; //定义队头和队尾指针 front=rear=-1; //置队列为空队列 rear++; qu[rear]=T; //根节点指针进入队列 while (front!=rear) //队列不为空 { front=(front+1)%MaxSize; p=qu[front]; //队头出队列 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 *T; T = CreateBiTree();//建立 LevelOrder(T); return 0; }

 

以上是关于毕业了-二叉树层次遍历算法-借助循环队列这个数据结构来实现,悟:数据结构是用来实现算法的的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的层次遍历

递归非递归的二叉树遍历(递归前中后,非递归前中后,层次遍历,凹入打印法等)

基于二叉树的层次遍历算法分析

(经典)二叉树的层次遍历和快速排序

LeetCode 107 ——二叉树的层次遍历 II

数据结构二叉树