LeetCode 107. 二叉樹的層次遍歷 II刷題筆記(C++)

寫在前面

  • 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;
}
  • 示例效果
    效果演示
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章