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