实现一颗二叉树的层序遍历。
程序员文章站
2022-03-26 12:36:36
...
1.--实现一颗二叉树的层序遍历。
分析如下:
1.如果此二叉树为空直接返回;
2.要想层序遍历二叉树,我们必须要一个容器来保存它的左右孩子节点
3.这个容器必须是先进先出,所以我们选择队列
4.已经遍历过的节点必须从队列中pop出去
代码如下:
#include<iostream>
#include<queue>
using namespace std;
struct Node
{
Node(int val)
:_left(NULL)
,_right(NULL)
,_val(val)
{}
Node* _left;
Node* _right;
int _val;
};
class BinaryTree
{
public:
BinaryTree()
{}
~BinaryTree()
{}
void SequenceTree(Node* root)
{
if(root==NULL)
return ;
if(root->_left==NULL&&root->_left==NULL)
{
cout<<root->_val<<" ";
return ;
}
queue<Node*> q;
Node* cur=root;
while(cur)
{
cout<<cur->_val<<" ";
if(cur->_left)
q.push(cur->_left);//push左节点进队列
if(cur->_right) //push右节点进队列
q.push(cur->_right);
cur=q.front();//cur等于队列首节点,pop掉该节点
q.pop();
}
}
private:
Node* root;
};
int main()
{
BinaryTree t;
Node* node1=new Node(1);
Node* node2=new Node(2);
Node* node3=new Node(3);
Node* node4=new Node(4);
Node* node5=new Node(5);
Node* node6=new Node(6);
Node* node7=new Node(7);
node1->_left=node2;
node1->_right=node3;
node2->_left=node4;
node2->_right=node5;
node3->_left=node6;
node3->_right=node7;
t.SequenceTree(node1);
system("pause");
return 0;
}
运行结果:
上一篇: 【指针】-5