二叉树的层序遍历
2016-03-11 18:26
381 查看
void LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType))
{
/* 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。*/
/* 层序遍历二叉树T算法(利用队列),对每个数据元素调用函数Visit */
SqQueue q;
QElemType p;
if(T)
{
InitQueue(&q);
EnQueue(&q,T);
while(!QueueEmpty(q))
{
DeQueue(&q,&p);
Visit(p->data);
if(p->lchild!=NULL) EnQueue(&q,p->lchild);
if(p->rchild!=NULL) EnQueue(&q,p->rchild);
}
printf("/n");
}
}
给定一棵二叉树,要求分层遍历该二叉树,即从上到下按层次访问该树,每一层单独输出一行,每一层要求访问的顺序为从左到右。
我们在遍历的过程中将该层节点的孩子节点压入一个队列,这样就可以实现从上到下一层一层地遍历该二叉树。
C++的程序描述如下:
[cpp] view
plain copy
print?
void printNodeByLevel(BinTree root)
{
if(root == NULL)
return;
vector<Node *> vec;
vec.push_back(root);
int cur = 0;
int last = 1;
while(cur < vec.size()) {
last = vec.size();
while(cur < last) {
cout<<vec[cur]->data<<" ";
if(vec[cur]->pLeft != NULL)
vec.push_back(vec[cur]->pLeft);
if(vec[cur]->pRight != NULL)
vec.push_back(vec[cur]->pRight);
++cur;
}
cout<<endl;
}
}
其中BinTree的定义如下:
[cpp] view
plain copy
print?
typedef struct Node
{
struct Node *pLeft;
struct Node *pRight;
int data;
}LNode, *BinTree;
{
/* 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。*/
/* 层序遍历二叉树T算法(利用队列),对每个数据元素调用函数Visit */
SqQueue q;
QElemType p;
if(T)
{
InitQueue(&q);
EnQueue(&q,T);
while(!QueueEmpty(q))
{
DeQueue(&q,&p);
Visit(p->data);
if(p->lchild!=NULL) EnQueue(&q,p->lchild);
if(p->rchild!=NULL) EnQueue(&q,p->rchild);
}
printf("/n");
}
}
给定一棵二叉树,要求分层遍历该二叉树,即从上到下按层次访问该树,每一层单独输出一行,每一层要求访问的顺序为从左到右。
我们在遍历的过程中将该层节点的孩子节点压入一个队列,这样就可以实现从上到下一层一层地遍历该二叉树。
C++的程序描述如下:
[cpp] view
plain copy
print?
void printNodeByLevel(BinTree root)
{
if(root == NULL)
return;
vector<Node *> vec;
vec.push_back(root);
int cur = 0;
int last = 1;
while(cur < vec.size()) {
last = vec.size();
while(cur < last) {
cout<<vec[cur]->data<<" ";
if(vec[cur]->pLeft != NULL)
vec.push_back(vec[cur]->pLeft);
if(vec[cur]->pRight != NULL)
vec.push_back(vec[cur]->pRight);
++cur;
}
cout<<endl;
}
}
其中BinTree的定义如下:
[cpp] view
plain copy
print?
typedef struct Node
{
struct Node *pLeft;
struct Node *pRight;
int data;
}LNode, *BinTree;
相关文章推荐
- poj1740 A New Stone Game
- POJ3628 Bookshelf 2(01背包)
- 图片文字的两种制作方法
- 安装windows git客户端 + TortoiseGit第三方工具
- jQuery 取值、赋值的基本方法整理
- CSU 1690 期望DP + 数据结构
- linux之touch命令修改文件的时间戳
- MsSqlserver 查看锁表与解锁
- unity3D中使用Socket进行数据通信(三)
- hive 配置 mysql时的问题(Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D)
- fragmenTransaction和fragment生命周期
- iOS开发之Swift标签栏按钮UITabBarItem样式修改(图标文字尺寸,颜色等)
- 你愿意让游戏读懂你的心吗?
- WPF-布局实例
- tomcat配置多个虚拟host,访问不同的web项目
- 图片文字制作的两种方式
- 58. Length of Last Word
- sun.misc.BASE64Encoder找不到jar包的解决方法
- iOS开发之详解正则表达式
- Android Support Design Library - CoordinatorLayout