题目
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
分析
这道题的本质二叉树的层次遍历。初始化一个队列,将根节点入队。遍历整个队列,将队首元素出队,并依次将结点的非NULL的左右子树结点入队,直至队列为空。
github链接:JZ22-从上往下打印二叉树
C++代码
#include <iostream>
#include <cstdlib>
#include <queue>
#include <vector>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
TreeNode* Create_BinaryTree()
{
TreeNode* T = new TreeNode(0);
string s;
cin>>s;
if(s == "#"){ //“#”是结束标志
T = NULL;
}else{
T->val = atoi(s.c_str()); //对当前结点初始化
T->left = Create_BinaryTree(); //递归构造左子树
T->right = Create_BinaryTree(); //递归构造右子树
}
return T;
}
class Solution {
public:
vector<int> PrintFromTopToBottom(TreeNode* root) {
vector<int> result;
if(root == NULL){
return result;
}
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
TreeNode* node = q.front();
q.pop();
result.push_back(node->val);
if(node->left){
q.push(node->left);
}
if(node->right){
q.push(node->right);
}
}
return result;
}
};
int main()
{
while(true){
TreeNode* root = Create_BinaryTree();
Solution s;
vector<int> result = s.PrintFromTopToBottom(root);
for(int i = 0 ; i < result.size() ; i++){
cout<<result[i]<<" ";
}
}
return 0;
}