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]
]

和第102题类似,给定一个二叉树,返回其层次遍历的结果,每层单独放到一起。不过本题返回的结果是最底层的子节点到最上面的根节点的结果,可以直接拿102题的结果,然后直接reverse就好。如果这样的话,那就太没意思了!对代码稍作改动,在开始时直接开辟好深度大小的vector,然后dfs每层遍历时,在结果中反向进行插入值就好,这样运行效率就提高了很多,代码记录如下:

class Solution {
public:
    vector<vector<int>> levelOrderBottom(TreeNode* root) {
        int depth = dfsDepth(root);
        vector<vector<int>> ret(depth, vector<int>());
        bfsLevelOrder(ret, depth - 1, root);
        return ret;
    }
    
    void bfsLevelOrder(vector<vector<int>> &ret, int level, TreeNode *root)
    {
        if(!root)
            return;
        if(ret.size() <= level)
        {
            ret.insert(ret.begin(), {});
        }
        ret[level].push_back(root->val);
        if(root->left)
            bfsLevelOrder(ret, level - 1, root->left);
        if(root->right)
            bfsLevelOrder(ret, level - 1, root->right);
    }
    
    int dfsDepth(TreeNode* root)
    {
        if(!root)
            return 0;
        return max(dfsDepth(root->left), dfsDepth(root->right)) + 1;
    }
};

猜你喜欢

转载自blog.csdn.net/happyjume/article/details/85222400