[LeetCode 107] Binary Tree Level Order Traversal II

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, 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   7

return its bottom-up level order traversal as:

[
  [15,7],
  [9,20],
  [3]
]

Diffculty
Easy

Similar Problems
[LeetCode 102] Binary Tree Level Order Traversal Medium

Analysis

这道题只需要把之前那题的结果 reverse 一下就可以了。或者每次不是 push_back(),而是 insert()。

Solutions
  1. 非递归方法,使用 queue 实现
class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode *root) {
        vector<vector<int> res;
        if (root == nullptr) return;
        queue<Node*> nodesQueue;
        int nodesInCurrentLevel = 0, nodesInNextLevel = 0;
        nodesQueue.push(root);
        ++nodesInCurrentLevel;
        vector<int> level;
        while (!nodesQueue.empty()) {
            Node *currNode = nodesQueue.front();
            nodesQueue.pop();
            nodesInCurrentLevel--;
            if (currNode != nullptr) {
                level.push_back(currNode->val);
                nodesQueue.push(currNode->left);
                nodesQueue.push(currNode->right);
                nodesInNextLevel += 2;
            }
            if (nodesInCurrentLevel == 0) {
                res.push_back(level);
                level.clear();
                nodesInCurrentLevel = nodesInNextLevel;
                nodesInNextLevel = 0;
            }
        }
        std::reverse(res.begin(), res.end());
        return res;
    }
};
  1. 递归方法
class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) { 
        vector<vector<int> result;
        levelRecursion(root, result, 0);
        return result;
    }

private:
    void levelRecursion(TreeNode *node, vector<vector<int>& res, int level) {
        if (node == nullptr) return;
        if (res.size() < level + 1) { // 根节点不为空,说明至少有一层
            res.insert(res.begin(), vector<int>());
        }
        res[res.size() - 1 - level].push_back(node->val);

        levelRecursion(node->left, res, level + 1);
        levelRecursion(node->right, res, level + 1);
    }
};

results matching ""

    No results matching ""