zoukankan      html  css  js  c++  java
  • 【每天一题】LeetCode 0107. 自底向上层遍历二叉树


    开源地址:点击该链接


    题目描述

    *     给定一个二叉树,返回其节点值自底向上的层次遍历。
    *     即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历
    * 
    * 例如:
    *     给定二叉树 [3,9,20,null,null,15,7]
    *         3
    *        / 
    *       9  20
    *         /  
    *        15   7
    *     返回其自底向上的层次遍历为:
    *     [
    *       [15,7],
    *       [9,20],
    *       [3]
    *     ]
    * 
    

    解题思路

    *     由于需要按层进行组成,且是vector<vector<int>>
    *     所以必须把每个层分开记录,另一点就是还要实现逆序
    *     分层可以通过单独记录每层节点来完成,而逆序有两种方式
    *     第一种是直接正序记录,然后再颠倒顺序
    *     第二种是进行递归记录每层节点,最后在每层中添加数据
    *     这样第二种就省去了第一种方法中颠倒顺序这步的操作
    *
    

    示例代码

    /**
     * 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:
        vector<vector<int>> levelOrderBottom(TreeNode* root) {
            if (root == NULL)
                return {};
    
            vector<vector<int>> res;
            vector<TreeNode *> nodes;
            nodes.push_back(root);
            do_order(nodes, res);
    
            return res;
        }
    
        void do_order(vector<TreeNode *> &nodes, vector<vector<int>> &res) {
            if (nodes.size() == 0)
                return;
    
            vector<TreeNode *> next_level;
            for (int i=0; i<nodes.size(); i++) {
                if (nodes[i]->left)
                    next_level.push_back(nodes[i]->left);
                if (nodes[i]->right)
                    next_level.push_back(nodes[i]->right);
            }
    
            do_order(next_level, res);
            vector<int> temp;
            for (int i=0; i<nodes.size(); i++) {
                temp.push_back(nodes[i]->val);
            }
            res.push_back(temp);
        }
    };
    
  • 相关阅读:
    PAT 甲级 1132 Cut Integer (20 分)
    AcWing 7.混合背包问题
    AcWing 9. 分组背包问题
    AcWing 5. 多重背包问题 II
    AcWing 3. 完全背包问题
    AcWing 4. 多重背包问题
    AcWing 2. 01背包问题
    AcWing 875. 快速幂
    AcWing 874. 筛法求欧拉函数
    AcWing 873. 欧拉函数
  • 原文地址:https://www.cnblogs.com/jiau/p/11690788.html
Copyright © 2011-2022 走看看