寫在前面
- 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;
}
- 示例效果