层次遍历二叉树

来源:互联网 发布:黑暗之魂3优化补丁 编辑:程序博客网 时间:2024/06/04 18:24
第二种方法——队列具体步骤是:先将根节点入队列,再读出,删除,再将左右子节点入队列,再将队列的头元素读出并删除,再将头元素的左右子节点入队列,以此类推……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;}

0 0