• 【Binary Tree Level Order Traversal II 】cpp


    题目:

    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,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7
    

    return its bottom-up level order traversal as:

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

    代码:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<vector<int>> levelOrderBottom(TreeNode* root) {
                vector<vector<int> > ret;
                if (!root) return ret;
                vector<int> tmp_ret;
                deque<TreeNode *> currLevel, nextLevel;
                currLevel.push_back(root);
                while ( !currLevel.empty() )
                {
                    while ( !currLevel.empty() )
                    {
                        TreeNode * tmp = currLevel.front();
                        currLevel.pop_front();
                        tmp_ret.push_back(tmp->val);
                        if ( tmp->left ) nextLevel.push_back(tmp->left);
                        if ( tmp->right ) nextLevel.push_back(tmp->right);
                    }
                    ret.push_back(tmp_ret);
                    tmp_ret.clear();
                    std::swap(currLevel, nextLevel);
                }
                std::reverse(ret.begin(), ret.end());
                return ret;
        }
    };

    tips:

    Binary Tree Level Order Traversal的基础上加一个reverse即可。

    ============================================

    第二次过这道题,直接用reverse的路子了。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<vector<int>> levelOrderBottom(TreeNode* root) {
                vector<vector<int> > ret;
                queue<TreeNode*> curr;
                queue<TreeNode*> next;
                if ( root ) curr.push(root);
                while ( !curr.empty() )
                {
                    vector<int> tmp;
                    while ( !curr.empty() )
                    {
                        tmp.push_back(curr.front()->val);
                        if ( curr.front()->left ) next.push(curr.front()->left);
                        if ( curr.front()->right ) next.push(curr.front()->right);
                        curr.pop();
                    }
                    ret.push_back(tmp);
                    std::swap(next, curr);
                }
                std::reverse(ret.begin(), ret.end());
                return ret;
        }
    };
  • 相关阅读:
    leetcode hot 100- 84. 柱状图中最大的矩形
    leetcode hot 100- 221. 最大正方形
    leetcode hot 100-34. 在排序数组中查找元素的第一个和最后一个位置
    leetcode hot 100-剑指 Offer 37. 序列化二叉树
    leetcode hot 100-2. 两数相加
    leetcode hot 100-33. 搜索旋转排序数组
    leetcode hot 100- 98. 验证二叉搜索树
    leetcode hot 100-152. 乘积最大子数组
    leetcode hot 100-19. 删除链表的倒数第N个节点
    v-modal的使用。
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4502623.html
Copyright © 2020-2023  润新知