topic
107. Order Traversal of Binary Tree II
Given the root node of the binary tree root
, return its node value Bottom -up order traversal. (That is, from the layer where the leaf node is located to the layer where the root node is located, traversing layer by layer from left to right)
Example 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[15,7],[9,20],[3]]
Example 2:
输入:root = [1]
输出:[[1]]
Example 3:
输入:root = []
输出:[]
hint:
- The number of nodes in the tree is within the
[0, 2000]
range -1000 <= Node.val <= 1000
code
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
queue<TreeNode*> que; // 声明一个辅助队列
vector<vector<int>> result;
if (root != nullptr) que.push(root);
while (!que.empty()) {
int size = que.size();
vector<int> vec; //保存每一层结点的数值向量
for (int i = 0; i < size; i++) {
//遍历每一层结点
TreeNode* s = que.front();
vec.push_back(s->val); //取队头的结点中的元素
que.pop(); //取完队头结点的元素,则将队头结点出队
if (s->left != nullptr) que.push(s->left); //左孩子不空则入队
if (s->right != nullptr) que.push(s->right); //右孩子不空则入队
}
result.push_back(vec);
}
reverse(result.begin(), result.end());
return result;
}
};