- Description:给你二叉树的根节点
root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 - 解法:
vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> v;if(root == nullptr) return v;queue<TreeNode*> q;q.push(root);while(!q.empty()){int size = q.size();vector<int> vec;while(size-- > 0){TreeNode* node = q.front();q.pop();vec.push_back(node->val);if(node->left) q.push(node->left);if(node->right) q.push(node->right);}v.push_back(vec);}return v;
}
很早之前的一次面试,要当场手撸层序遍历,没有搞出来。。。尴尬,一定要一雪前耻!!!
- [107] 自底向上层序遍历
- 解法:第一想法就是复制102,然后最后把return的v reverse,看了自己之前的做法,也是可以的
vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> ret;if(root == nullptr) return ret;queue<TreeNode*> q;q.push(root);while(!q.empty()){vector<int> v;int size = q.size();for(int i = 0; i < size; i++){TreeNode* node = q.front();q.pop();v.push_back(node->val);if(node->left) q.push(node->left);if(node->right) q.push(node->right);}ret.insert(ret.begin(), v);//头插法//也可以如下正常插入//ret.push_back(v);}// 翻转返回的ret// reverse(ret.begin(), ret.end());return ret;}