题目来源
力扣107二叉树的层序遍历II
题目概述
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
思路分析
二叉树的层序遍历结果翻转即可得到答案
代码实现
java实现
public class Solution {public List<List<Integer>> levelOrderBottom(TreeNode root) {List<List<Integer>> res = new ArrayList<>();if (root == null) {return res;}// 父节点列表List<TreeNode> parentList = new ArrayList<>();parentList.add(root);while (!parentList.isEmpty()) {// 孩子节点列表List<TreeNode> sonList = new ArrayList<>();for (TreeNode parent : parentList) {if (parent.left != null) {sonList.add(parent.left);}if (parent.right != null) {sonList.add(parent.right);}}// 父节点转valres.add(parentList.stream().map(node -> node.val).collect(Collectors.toList()));parentList = sonList;}Collections.reverse(res);return res;}
}
c++实现
class Solution {
public:vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> res;if (root == nullptr) {return res;}vector<TreeNode*> parentList;parentList.push_back(root);while (!parentList.empty()) {vector<TreeNode*> sonList;vector<int> temp;for (auto parent : parentList) {temp.push_back(parent->val);if (parent->left != nullptr) {sonList.push_back(parent->left);}if (parent->right != nullptr) {sonList.push_back(parent->right);}}res.push_back(temp);parentList = sonList;}reverse(res.begin(), res.end());return res;}
}