zoukankan      html  css  js  c++  java
  • 【LeetCode-树】二叉树的层次遍历 II

    题目描述

    给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
    示例:

    例如:
    给定二叉树 [3,9,20,null,null,15,7],
    
        3
       / 
      9  20
        /  
       15   7
    返回其自底向上的层次遍历为:
    
    [
      [15,7],
      [9,20],
      [3]
    ]
    

    题目链接: https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

    思路

    先使用常规的层次遍历方法自上而下遍历,并将结果存在二维数组 ans 中,然后对 ans 进行调整即可。调整的方法是使用两个指针 left、right,left 从前往后移动,right 从后往前移动,每次移动一个位置,交换 ans[left] 和 ans[right],重复这个过程直到 left>=right。具体代码如下:

    /**
     * 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==nullptr) return {};
    
            queue<TreeNode*> q;
            q.push(root);
            vector<vector<int>> ans;
            while(!q.empty()){
                int n = q.size();
                vector<int> curLevel;
                for(int i=0; i<n; i++){
                    TreeNode* node = q.front(); q.pop();
                    curLevel.push_back(node->val);
                    if(node->left!=nullptr) q.push(node->left);
                    if(node->right!=nullptr) q.push(node->right);
                }
                ans.push_back(curLevel);
            }
    
            int left = 0;
            int right = ans.size()-1;
            while(left<right){
                swap(ans[left], ans[right]);
                left++;
                right--;
            }
            return ans;
        }
    };
    
    • 时间复杂度:O(n)
    • 空间复杂度:O(n)
  • 相关阅读:
    Spring源码加载BeanDefinition过程
    设计模式之☞委派模式,通俗易懂,一学就会!!!
    SpringMvc 跨域处理
    寻找全排列的下一个数
    使用两个栈实现队列
    无序数组在排序后的最大相邻查
    判断一个数是否是2的幂
    最大公约数
    最小栈的实现
    js 原型与原型链
  • 原文地址:https://www.cnblogs.com/flix/p/13290553.html
Copyright © 2011-2022 走看看