LeetCode 102 二叉树的层次遍历
题目:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
解题思路:
层次遍历都知道,可是这题要求每一层装一个数组,所以就牵扯到判断层次问题。前面有一章博客讲到有一种对于层次遍历非常好用的方法,在这里也派上用场,请点击 这里 查看,然后再加上如下代码中的一些处理即可解决。
代码:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 13 vector<vector<int>> levelOrder(TreeNode* root) { 14 vector<vector<int>> ans; 15 vector<int> temp; 16 queue<TreeNode*> que; 17 int front = -1; 18 int rear = -1; 19 int last = 0; 20 int lever = 0; 21 if(!root) 22 return ans; 23 TreeNode* p = root; 24 que.push(p); 25 rear++; 26 while(!que.empty()) 27 { 28 p = que.front(); 29 front++; 30 que.pop(); 31 if(p->left) { 32 rear++; 33 que.push(p->left); 34 } 35 if(p->right) { 36 rear++; 37 que.push(p->right); 38 } 39 temp.push_back(p->val); 40 if(last == front) { 41 ans.push_back(temp); 42 temp.clear(); 43 last = rear; 44 } 45 } 46 return ans; 47 } 48 };