【剑指offer】不分行从上到下打印二叉树,C++实现(层序遍历)
原创文章,转载请注明出处!
1.题目
从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如:
图 不分行从上往下按层打印二叉树的顺序为8-6-10-5-7-9-11
2.思路
本题使用队列做为辅助容器,利用队列的先进先出策略,按层打印二叉树。举例:首先,将根节点压入队列;然后,先将队首元素放入存储遍历结果的vector中,再判断队首节点是否有左右子节点,如果有左右子节点,则将做右子节点压入队列,队首元素弹出队首,循环执行直至队列为空。最后,将存储遍历结果的vector返回。
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 };