关于二叉树层次遍历的问题
这是一个关于二叉树迭代层次遍历的问题。
一.
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
思想:
广搜一次即可。
1. 我们的二叉树采用二叉链
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
的存储结果。
2. 我们的层次遍历的思想:
按层次来访问元素。首先是根结点,然后是第一层的子结点,依此类推。由于层次遍历是迭代的过程,它用一个队列作为中间的存储容器。开始,根结点进入这个队列,下面的迭代操作就是不停的弹出结点,对该结点进行一些操作,然后将子结点加入到队列尾。
3. 每层的数据打印我们采用换行打印的形式。
二.运行结果展示(如图1显示):
图1
三.主要源码
struct node
{
BinNodePtr
*treeNode;
int level;
}queue[10000];
void spanTree(BinNodePtr *&T)
{
T = new BinNodePtr;
T->setVal(3);
BinNodePtr *n1, *n2, *n3, *n4, *n5;
n1 = new BinNodePtr;
n2 = new BinNodePtr;
n3 = new BinNodePtr;
n4 = new BinNodePtr;
n5 = new BinNodePtr;
n1->setVal(6);
n2->setVal(8);
n3->setVal(2);
n4->setVal(15);
n5->setVal(1);
T->setLeft(n1);
T->setRight(n2);
n1->setRight(n3);
n2->setLeft(n4);
n3->setLeft(n5);
}
void work(BinNodePtr *&T)
{
int head,tail,curLevel,tempLevel;
BinNodePtr *temp;
queue[0].treeNode = T;
queue[0].level = 0;
head = 0;
tail = 1;
curLevel = 0;
while(head != tail)
{
if(queue[head].level>curLevel)
{
cout<val()<<" ";
head++;
if(temp->left() != NULL)
{
queue[tail].treeNode = temp->left();
queue[tail].level = tempLevel + 1;
tail++;
}
if(temp->right() != NULL)
{
queue[tail].treeNode = temp->right();
queue[tail].level = tempLevel + 1;
tail++;
}
}
cout< *T;
spanTree(T);
work(T);
system("pause");
return 0;
}