热门IT资讯网

107. 二叉树的层次遍历 II

发表于:2024-11-24 作者:热门IT资讯网编辑
编辑最后更新 2024年11月24日,给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],3/ \9 20/ \

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

例如:
给定二叉树 [3,9,20,null,null,15,7],

3/ \9  20/  \15   7

返回其自底向上的层次遍历为:

[[15,7],[9,20],[3]]

解题思路:首先temp临时记录层次遍历每一层的结点值,当遍历到下一层的结点时就将temp记录到result中.

代码实现


/** * 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> levelOrderBottom(TreeNode* root) {        vector > result;   //记录每一层的节点值        if(root == NULL)        return result;        queue > Queue;        vector temp;   //临时记录每一层的节点值        Queue.push(make_pair(root,0));        while(!Queue.empty())        {            TreeNode* node = Queue.front().first;            int step = Queue.front().second;            Queue.pop();            if(result.size() == step - 1)            {                result.push_back(temp);                temp.clear();                temp.push_back(node->val);            }            else            {                temp.push_back(node->val);            }            if(node->left)            Queue.push(make_pair(node->left, step + 1));            if(node->right)            Queue.push(make_pair(node->right, step + 1));        }        result.push_back(temp);        reverse(result.begin(),result.end());        return result;    }};
0