您的位置:首页 > 职场人生

剑指offer——面试题23:从上往下打印二叉树(树的递归创建,广度优先搜索,队列)

2015-08-17 09:55 441 查看
题目描述:

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路:

采用广度优先搜索的方法来做,用队列,出来一个时,将它的左右结点进队列(如果有的话)

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct TreeNode
{
int va;
TreeNode* left;
TreeNode* right;
TreeNode(int x):va(x),left(NULL),right(NULL){}
};

//二叉树的先序遍历的创建,这里我将输入时空的设为1000
void producted(TreeNode** root)
{
int val;
cin>>val;
cin.ignore(numeric_limits<streamsize>::max(),'\n');
if(val==1000)
{
*root=NULL;
return;
}
else
*root=new TreeNode(val);

producted(&(*root)->left);
producted(&(*root)->right);
return;
}

//广度优先搜索二叉树,在这里采用队列queue来做。
void print(TreeNode* root,vector<int>& vec)
{
if(root==NULL)
return;
queue<TreeNode*> qu;
qu.push(root);
while(!qu.empty())
{
TreeNode* temp=qu.front();
qu.pop();
vec.push_back(temp->va);

if(temp->left)
qu.push(temp->left);
if(temp->right)
qu.push(temp->right);
}
return;
}
int main()
{
TreeNode* root;
producted(&root);

vector<int> vec;

print(root,vec);
for(vector<int>::iterator i=vec.begin();i!=vec.end();i++)
cout<<*i<<' ';
cout<<endl;

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: