题目描述
从上到下打印出二叉树的每个节点,同层节点从左至右打印。
解题思路
题目的要求时从上到下,每层从左到右,即按层依次输出。
通过队列实现二叉树的遍历,同样还有图的遍历也可以使用这个方法。
这需要借助队列(queue)来进行排序输出。然后把输出结果存放到一个vector容器中。把每层结点依次放到队列中,然后依次输出。
先把根结点存入队列
只要队列不为空则执行以下步骤;
- 把队列的头结点压入到vector容器中
- 若队列的头结点的左结点不为空,则将左结点存入队列中
- 若队列的头结点的右结点不为空,则将右结点存入队列中
- 然后删除队列的头结点
输出vector容器;
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| 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) { if (root == NULL) return result; Q.push(root); while (!Q.empty()) { TreeNode * tmp; tmp = Q.front(); result.push_back(tmp->val); if (tmp->left != NULL) Q.push(tmp->left); if (tmp->right != NULL) Q.push(tmp->right); Q.pop(); } return result; } private: vector<int> result; queue<TreeNode *> Q; };
|
参考博文链接:https://cuijiahua.com/blog/2017/12/basis_22.html