按层遍历二叉树(队列实现)
2013-09-13 22:10
211 查看
按层遍历二叉树的思路:
1)创建一个队列用于保存指向Node节点的指针
2) 每遇到一个节点就遍历该节点,然后将该节点不为空的孩子压入栈中
3) 从栈中取出一个节点,回到第二步
1)创建一个队列用于保存指向Node节点的指针
2) 每遇到一个节点就遍历该节点,然后将该节点不为空的孩子压入栈中
3) 从栈中取出一个节点,回到第二步
#include <iostream> #include <queue> using namespace std; struct Node { int num; Node* pLeft; Node* pRight; }; void insert(Node* &p,int num) { Node* pTmp=new Node(); pTmp->num=num; pTmp->pLeft=pTmp->pRight=NULL; if(p==NULL) { p=pTmp; return; } if(num<p->num) insert(p->pLeft,num); else if(num>p->num) insert(p->pRight,num); else return; } void PrintInLayer(Node* p) { queue<Node*> MyQueue; int MyQueue_size; int MyQueue_pos; MyQueue.push(p); while(p!=NULL||!MyQueue.empty()) { MyQueue_size=MyQueue.size(); MyQueue_pos=0; while(MyQueue_pos<MyQueue_size) { cout<<p->num<<" "; MyQueue.pop(); if(p->pLeft!=NULL) MyQueue.push(p->pLeft); if (p->pRight!=NULL) MyQueue.push(p->pRight); if(!MyQueue.empty()) { p=MyQueue.front(); //MyQueue.pop(); } else p=NULL; MyQueue_pos++; } cout<<endl; } } void main() { Node* p=NULL; insert(p,10); insert(p,6); insert(p,14); insert(p,4); insert(p,8); insert(p,12); insert(p,16); insert(p,1); insert(p,5); insert(p,15); insert(p,17); insert(p,7); insert(p,9); PrintInLayer(p); }
相关文章推荐
- 二叉树(利用栈和队列实现递归和非递归遍历,构建等)
- 数据结构 二叉树层序遍历的队列实现
- 二叉树按层次遍历--队列实现
- 二叉树前中后序遍历的递归版本和非递归版本、队列实现的层次遍历
- 基于栈和队列实现二叉树的遍历
- 数据结构 利用循环队列层次遍历一棵二叉树 递归实现
- 二叉树的层序遍历(非递归,借用队列实现)
- 队列和堆栈实现二叉树的遍历
- [二叉树专题]:广度优先:按层次遍历二叉树的非递归实现||使用队列实现层次遍历二叉树
- C++非递归队列实现二叉树的广度优先遍历
- 【C/C++】【用队列结构实现二叉树的层次遍历】
- 利用队列实现二叉树的层次遍历
- 二叉树的前/中/后/层序遍历(前/中/后序递归实现,层序队列实现)
- 二叉树层次遍历(借助队列实现)
- python 用栈和队列实现二叉树的深度优先遍历(三种)和广度优先遍历
- c语言实现二叉树层次遍历(借助队列实现)
- 二叉树按层次遍历--队列实现
- 二叉树按层次遍历--队列实现
- 二叉树层次遍历队列实现
- 数据结构 — 6.顺序队列(循环)实现二叉树层次遍历