二叉树的层次遍历,需要用到队列进行存储还输出;
其访问的基本过程:
先根节点入队,之后
1)从队列中取出一个元素;
2)访问当前元素所指节点
3)若该元素所指节点的左右孩子节点非空,则将左右孩子的指针顺序入队;
代码(包含获取节点深度),当中使用了指针,防止在访问其他节点时修改了根节点的数据:
struct node{
int data;
int layer;
node *lchild;
node *rchild;
};
void layerOrder(node *root)
{
queue<node *> q;
q.push(root);
root->layer = 1;
while(!q.empty())
{
node *now = q.front();
q.pop();
printf("%d ",now->data);
if(now->lchild != NULL)
{
q.push(now->lchild);
now->lchild->layer += 1;
}
if(now->rchild != NULL)
{
q.push(now->rchild);
now->rchild->layer += 1;
}
}
}