以上图为例:
#include <iostream>
#include<queue>
using namespace std;
#define ok 0
#define error -1
#define TE char
typedef struct TreeNode
{
TE data;
TreeNode* firstchild, *nextbrother;
}TreeNode,*Tree;
int InitTree(Tree& T)
{
T = (Tree)malloc(sizeof(TreeNode));
if (!T)
return error;
T->data = NULL;
T->firstchild = NULL;
T->nextbrother = NULL;
return ok;
}
int preCreateT(Tree &T)//先序创建树
{
TE t;
cin >> t;
if (t == '#')
T = NULL;
else
{
T = (Tree)malloc(sizeof(TreeNode));
if (T)
{
T->data = t;
preCreateT(T->firstchild);
preCreateT(T->nextbrother);
}
else
return error;
}
return ok;
}
int TraveserLevel(Tree T, int n)//对树的第n层进行遍历;
{
if (T)
{
Tree p=NULL;
Tree temp = NULL;
Tree t;
queue<Tree> Q;
Q.push(T);
Q.push(NULL);
int i = 1;//记录当前层数
while (!Q.empty())
{
if (i == n)//若找到了该层
{
while (Q.front()!=NULL)
{
t = Q.front();
cout << t->data << " ";
Q.pop();
}
break;
}
else//如果没有到第n层,释放原先Q中所有元素,将他们的孩子全部入队//每一层结束标志为NULL
{
while (Q.front() != NULL)//入队出队
{
p = Q.front();
if (p->firstchild)
{
Q.push(p->firstchild);
t = p->firstchild;
while (t->nextbrother)//孩子的兄弟入队
{
Q.push(t->nextbrother);
t = t->nextbrother;
}
}
Q.pop();
}
Q.pop();//将多余的空指针弹出;
Q.push(NULL);//作为一层结束的标志
i++;
}
}
}
return ok;
}
int main()
{
//RAD#E##B#CFG#H#K#####这里是例子的先序
Tree T;
InitTree(T);
cout << "先序创建树:";
preCreateT(T);
cout << endl<<"遍历第几层:";
int n = 0;
cin >> n;
TraveserLevel(T, n);
cout << endl;
return 0;
}