【剑指offer】不分行从上到下打印二叉树,C++实现(层序遍历)

原创文章,转载请注明出处!

本题牛客网地址

博客文章索引地址

博客文章中代码的github地址

1.题目

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

image

图  不分行从上往下按层打印二叉树的顺序为8-6-10-5-7-9-11

2.思路

      本题使用队列做为辅助容器,利用队列的先进先出策略,按层打印二叉树。举例:首先,将根节点压入队列;然后,先将队首元素放入存储遍历结果的vector中,再判断队首节点是否有左右子节点,如果有左右子节点,则将做右子节点压入队列,队首元素弹出队首,循环执行直至队列为空。最后,将存储遍历结果的vector返回。

image

3.代码

  1 /*
  2 struct TreeNode {
  3     int val;
  4     struct TreeNode *left;
  5     struct TreeNode *right;
  6     TreeNode(int x) :
  7             val(x), left(NULL), right(NULL) {
  8     }
  9 };*/
 10 class Solution {
 11 public:
 12     vector<int> PrintFromTopToBottom(TreeNode* root) {
 13 
 14         // 存储结果
 15         vector<int>  result;
 16 
 17         // 边界条件
 18         if(root == NULL)
 19             return result;
 20 
 21         // 辅助容器:双端队列(存储指向二叉树节点的指针)
 22         queue<TreeNode*> q;
 23 
 24         // 辅助指针:指向队列弹出的指针
 25         TreeNode* fr;
 26 
 27         // 根节点入队列
 28         q.push(root);
 29 
 30         // 遍历队列
 31         while(!q.empty())
 32         {
 33             // 
 34             fr=q.front();
 35             result.push_back(fr->val);
 36             if(fr->left != NULL)
 37                 q.push(fr->left);
 38             if(fr->right != NULL)
 39                 q.push(fr->right);
 40             q.pop();
 41         }
 42 
 43        return result;
 44     }
 45 };
posted @ 2018-03-23 15:38  wanglei5205  阅读(1373)  评论(0编辑  收藏  举报
levels of contents