70. 二叉树的层次遍历 II

给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历)。
原题见这里
这是另外一个题的扩展,见69题,这个题目要求层次遍历二叉树,并且把每一层放入一个vector,整体返回一个vector。
这个题要求是最底层的放在最前面。

借助stack

层次遍历是要借助queue的,这个不必多说,基本操作,怎么分层在69题中已经讨论过了,就是利用一个变量来计算每一层的容量。
然后每一层放入vector<vector<int>>中,这样放下来是顺序的,题目要求逆序,很容易想到的一种方法是借助stack,先进后出,我们都放入一个stack中,然后逐个取出来放入vector,虽然增加了一点空间消耗,但是复杂度并不高。
顺便看下stack的用法,c++primer中基本没有讲到stack,c++reference官网上可查:stack

几个主要的成员函数

作为LIFO(last in first out)容器,stack用的是非常多的,看这几个常用的成员函数也基本能理解,STL中stack也是作为模板类,所以其中存放的数据类型也是可以自定义的。

vector<vector<int>> levelOrderBottom(TreeNode * root) {
        vector<vector<int>> res;
        stack<vector<int>> sres;
        if(root==NULL)
        return res;
        queue<TreeNode *> que;
        que.push(root);
        int len=1;

        while(!que.empty())
        {
            len=que.size();          
            vector<int> vtmp;
            while(len--)            //逐层的关键一步
            {
                TreeNode *tmp;
                tmp=que.front();
                vtmp.push_back(tmp->val);
                que.pop();
                if(tmp->left)  que.push(tmp->left);
                if(tmp->right) que.push(tmp->right);
            }
            if(!vtmp.empty())
            {
                sres.push(vtmp);          //放入堆栈
            }
            
        }
        while(!sres.empty())
        {                            //逐一出栈
            res.push_back(sres.top());
            sres.pop();
        }
        
        return res;
        
        // write your code here
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 描述 给出一棵二叉树,返回其节点值从底向上的层次序遍历(按从叶节点所在层到根节点所在的层遍历,然后逐层从左往右遍历...
    6默默Welsh阅读 541评论 0赞 1
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,883评论 1赞 31
  • 一直以来,我都很少使用也避免使用到树和图,总觉得它们神秘而又复杂,但是树在一些运算和查找中也不可避免的要使用到,那...
    24K男阅读 6,893评论 5赞 14
  • 平时写代码没有时间限制,一笔试就各种手忙脚乱,昨天去哪儿笔试的时候也这样,写得乱七八糟的,二叉树遍历都能整出各种幺...
    假装会编程阅读 5,175评论 0赞 0
  • 那一片翠绿的麦田,几株独行的青稞,蜿蜒的田埂,晚霞披落的金黄。 那年,我们一群人就站在那片田野,张望着忽然跳出来的...
    璞墨西塘阅读 1,059评论 0赞 50

友情链接更多精彩内容