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

例如:
给定二叉树 [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<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int> > result; //记录每一层的节点值 if(root == NULL) return result; queue<pair<TreeNode*,int> > Queue; vector<int> 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; }};