Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (i.e, from left to right, level by level from leaf to root).
For example: Given binary tree [3,9,20,null,null,15,7],
3 / \ 9 20 / \ 15 7return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]题意:
给定一个二叉树,返回由底到顶层次遍历的结果。结果要求为一个二维数组,每层的结果保存在一个一维数组中。
思路:
和102. Binary Tree Level Order Traversal的思路一样,区别只在于最后利用STL的变序算法reverse(),颠倒res的前后顺序。
8ms
class Solution { public: vector<vector<int> > levelOrderBottom(TreeNode *root) { vector<vector<int> > res; if (root == NULL) return res; queue<TreeNode*> q; q.push(root); while (!q.empty()) { vector<int> oneLevel; int size = q.size(); for (int i = 0; i < size; ++i) { TreeNode *node = q.front(); q.pop(); oneLevel.push_back(node->val); if (node->left) q.push(node->left); if (node->right) q.push(node->right); } res.push_back(oneLevel); } reverse(res.begin(),res.end()); return res; } };和102. Binary Tree Level Order Traversal一样,这道题也可以用递归来求解:
8ms
class Solution { public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int> > res; levelorder(root, 0, res); return vector<vector<int> > (res.rbegin(), res.rend()); } void levelorder(TreeNode *root, int level, vector<vector<int> > &res) { if (!root) return; if (res.size() == level) res.push_back({}); res[level].push_back(root->val); if (root->left) levelorder(root->left, level + 1, res); if (root->right) levelorder(root->right, level + 1, res); } };