写在前面
- leetcode刷题ing,积累相关代码能力
- 知识盲点、特此笔记
- vector二维数组、二叉树层次遍历(自底向上)
题目描述
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
AC代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
void levelOrder(vector<vector<int>>& res, TreeNode* root, int n)
{
if(NULL == root)
return ;
else
{
// 超过数组最大长度,重置2维数组大小,数组下标保证同一层次
if(n==res.size())
{
res.resize(n+1);
}
res[n].push_back(root->val);
levelOrder(res, root->left, n+1);
levelOrder(res, root->right, n+1);
}
}
vector<vector<int>> levelOrderBottom(TreeNode* root)
{
vector<vector<int>> res;
levelOrder(res, root, 0);
// 排序,实现自底向上
reverse(res.begin(), res.end());
return res;
}
};
- vector 2维数据组
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int i,j;
vector<vector<int>> res(5);
for (i = 0; i < res.size(); i++)
res[i].resize(i);
for(i = 0; i < res.size(); i++)
{
for (j = 0; j < res[i].size(); j++)
{
res[i][j] = (i+1)*(j+1);
cout << res[i][j] << " ";
}
cout << endl;
}
// 2维数组逆序后输出效果
reverse(res.begin(), res.end());
for(i = 0; i < res.size(); i++)
{
for (j = 0; j < res[i].size(); j++)
cout << res[i][j] << " ";
cout << endl;
}
return 0;
}
- 示例效果