您的位置:首页 > 其它

层次遍历二叉树

2015-09-28 20:11 267 查看
第二种方法——队列
具体步骤是:先将根节点入队列,再读出,删除,再将左右子节点入队列,再将队列的头元素读出并删除,再将头元素的左右子节点入队列,以此类推……
void QueueVisit(BiTreeNode *p)
{
queue  q_first;
BiTreeNode *temp;
q_first.push(p);//将根节点插入到双向队列的尾部
cout<<"按队列遍历:"<<endl;
while(q_first.empty()==false)
{
temp=q_first.front();//取队首元素
q_first.pop();//删除队首元素
cout<<temp->data<<" ";
if(temp->lchild!=NULL)
q_first.push(temp->lchild);
if(temp->rchild!=NULL)
q_first.push(temp->rchild);
}
cout<<endl;
}
第三种方法——容器vector
方法跟第二种是类似的,只是不存在删除头元素,而是将所有的元素都存在容器中,依次读取,读到哪一个节点的时候,便将哪一个节点的左右子节点存入容器中。
void VectorVisit(BiTreeNode *p,int size)
{
vector vec1;
BiTreeNode *temp;
int current=0;
int end=1;
vec1.push_back(p);
cout<<"按容器遍历:"<<endl;
while(current<szie)
{
temp=vec1[current];
cout<<temp->data<<" ";
if(temp->lchild!=NULL)
vec1.push_back(temp->lchild);
if(temp->rchild!=NULL)
vec1.push_back(temp->rchild);
end=vec1.size();
current++;
}
cout<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: