22题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
层次遍历,用一个队列
/* 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) { vector<int> res; if(!root) return res; //初始空 queue<TreeNode*> q; q.push(root); //头节点入队 while(!q.empty()) { TreeNode* node=q.front(); q.pop(); //当前点出队 res.push_back(node->val); //这一点的值加入此层的数组 if(node->left) q.push(node->left); //为下一层准备 if(node->right) q.push(node->right); } return res; } };
60题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
在上面一题的基础上,每一层需要有一个q.size()的循环,控制这一层的元素
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> ans; if(!pRoot)return ans; queue<TreeNode*> q; q.push(pRoot); while(!q.empty()){ int size = q.size(); vector<int> floor; while(size--){ TreeNode *tmp = q.front(); q.pop(); floor.push_back(tmp->val); if(tmp->left)q.push(tmp->left); if(tmp->right)q.push(tmp->right); } ans.push_back(floor); floor.clear(); } return ans; } };