从上往下打印二叉树
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
#include "stdafx.h"
#include<vector>
#include<queue>
#include<iostream>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> result;
queue<TreeNode*> q; //把节点依次放入队列中,先进先出
TreeNode* fr;
if (root == NULL)
{
return result;
}
q.push(root);
while (!q.empty())
{
fr = q.front();
result.push_back(fr->val);
if (fr->left != NULL)
q.push(fr->left);
if (fr->right != NULL)
q.push(fr->right);
q.pop();
}
return result;
}
};
int main()
{
TreeNode* root = new TreeNode(1);
TreeNode* left = new TreeNode(2);
TreeNode* right = new TreeNode(3);
TreeNode* lleft = new TreeNode(4);
TreeNode* lright = new TreeNode(5);
TreeNode* rleft = new TreeNode(6);
TreeNode* rright = new TreeNode(7);
root->left = left;
root->right = right;
left->left = lleft;
left->right = lright;
right->left = rleft;
right->right = rright;
Solution *s = new Solution();
vector<int> result = s->PrintFromTopToBottom(root);
for (int i = 0; i < result.size(); i++)
{
cout << result[i] << endl;
}
return 0;
}