题目描述

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

来源,leetcode 每日一题 107. 二叉树的层次遍历Ⅱ

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

  1. 3
  2. / \
  3. 9 20
  4. / \
  5. 15 7

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

  1. [
  2. [15,7],
  3. [9,20],
  4. [3]
  5. ]

解题思路

  1. 层次遍历,使用队列,将每层节点按序加载进来。
  2. 自底向上输出:反序遍历结果。

    代码

    1. class Solution {
    2. public:
    3. vector<vector<int>> levelOrderBottom(TreeNode* root) {
    4. vector<vector<int>> answer;
    5. if (root == NULL) {
    6. return answer;
    7. }
    8. queue<TreeNode*> que1;
    9. que1.push(root);
    10. int times = 0;
    11. while (times == 0 || !que1.empty()) {
    12. vector<int> temp;
    13. queue<TreeNode*> que2;
    14. while (!que1.empty()) { // 队列不空
    15. TreeNode* node = que1.front();
    16. que1.pop();
    17. if (node->left != NULL) {
    18. que2.push(node->left);
    19. }
    20. if (node->right != NULL) {
    21. que2.push(node->right);
    22. }
    23. temp.push_back(node->val);
    24. }
    25. answer.push_back(temp);
    26. que1 = que2;
    27. times++;
    28. }
    29. reverse(answer.begin(), answer.end());
    30. return answer;
    31. }
    32. };