二叉树的层次遍历 II

题目:

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

示例:

输入:
给定二叉树 [3,9,20,null,null,15,7],



返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]

解题方法:

典型的广度优先搜索,简单说明一下思路:

  • 创建一个队列,队列的特点就是先进先出,向队列中插入根节点;
  • 取出当前队列中的结点,创建一个vector用来存储取出结点的val值,然后把该结点的左右子节点指针存进队列。
  • 不考虑取出结点的子结点的话,每次取出的结点都在同一层,最后队列清空,把得到的vector反转,就可以得到要求的层次遍历结果。

代码和结果:

/**
 * 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) {
        vector<vector<int>> res;
        if(root==NULL)
            return res;
        queue<TreeNode *> qu;
        qu.push(root);
        while(qu.size())
        {
            vector<int> tp;
            int len=qu.size();
            for(int i=0;i<len;i++)
            {
                TreeNode* ptr=qu.front();
                tp.push_back(ptr->val);
                if(ptr->left) qu.push(ptr->left);
                if(ptr->right) qu.push(ptr->right);
                qu.pop();
            }
            res.push_back(tp);
        }
        reverse(res.begin(),res.end());
        return res;
    }
};

运行结果:

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。