题目描述:
不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。
数据范围:
0<=节点总数<=1000
-1000<=节点值<=1000
示例:
输入:
{8,6,10,#,#,2,1}
返回值:
[8,6,10,2,1]
解题思路:
本题考察数据结构树的使用,可借助队列来解。通过队列的先进先出特征,将二叉树的结点一行行放入队列,每弹出一个结点,就将其值推给output;当队列空的时候,就说明二叉树遍历完成了。
测试代码:
/* 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) { // 定义队列 queue<TreeNode*> temp; vector<int> output; // 先存放根节点 if(root) temp.push(root); // 若队列不为空,则说明树未完全遍历 while(!temp.empty()) { // 提取队列最前的结点 TreeNode *a=temp.front(); // 输出该结点的值 output.push_back(a->val); // 弹出已经存储过的结点 temp.pop(); // 将弹出结点的左右子树按序存放在队列中,先进先出 if(a->left) temp.push(a->left); if(a->right) temp.push(a->right); } return output;; } };