zoukankan      html  css  js  c++  java
  • leetcode Binary Tree Level Order Traversal II

    这题的变种

    对一棵树从最后一次开始层次遍历,并返回结果。例如:

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

    思路:用一个queue遍历每行,行与行之间NULL分开,然后用stack记录每次的结果,最后将stack中的导出:

    /**
     * Definition for binary tree
     * 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> > ans;
            if (!root) return ans;
            
            queue<TreeNode *> que;
            stack<vector<int> > sta;
            vector<int> tmp;
            TreeNode *p;
            que.push(root);
            que.push(NULL);
            
            while(!que.empty()) //先把结果放在stack中
            {
                p = que.front();
                if (p != NULL)
                {
                    tmp.push_back(p -> val);
                    if (p -> left)
                        que.push(p -> left);
                    if (p -> right)
                        que.push(p -> right);
                    que.pop();
                }
                else
                {
                    que.pop();
                    sta.push(tmp);
                    tmp.clear();
                    if (!que.empty())
                    {
                        que.push(NULL);
                    }
                }
            }
            while(!sta.empty()) // 导出结果
            {
                ans.push_back(sta.top());
                sta.pop();
            }
            return ans;
        }
    };

     后面发现其实stack是多此一举了,可以直接输入到ans中,然后最后利用reverse函数将容器反转即可。

    /**
     * Definition for binary tree
     * 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> > ans;
            if (!root) return ans;
            
            queue<TreeNode *> que;
            vector<int> tmp;
            TreeNode *p;
            que.push(root);
            que.push(NULL);
            
            while(!que.empty()) //先把结果放在stack中
            {
                p = que.front();
                if (p != NULL)
                {
                    tmp.push_back(p -> val);
                    if (p -> left)
                        que.push(p -> left);
                    if (p -> right)
                        que.push(p -> right);
                    que.pop();
                }
                else
                {
                    que.pop();
                    ans.push_back(tmp);
                    tmp.clear();
                    if (!que.empty())
                    {
                        que.push(NULL);
                    }
                }
            }
            reverse(ans.begin(), ans.end());
            return ans;
        }
    };
    View Code
  • 相关阅读:
    HDU1565_方格取数(1)
    HDU3046_Pleasant sheep and big big wolf
    HDU4183_Pahom on Water
    「zoj2314」Reactor Cooling (无源汇上下界可行流)
    [ACM-ICPC 2018 沈阳网络赛] G. Spare Tire (思维+容斥)
    [ACM-ICPC 2018 沈阳网络赛] D. Made In Heaven (k短路模板)
    lct,半平面交,线性基,k短路
    P3950 部落冲突 (LCT暴力)
    P4219 [BJOI2014]大融合 ( LCT维护虚实子树size )
    P3203 [HNOI2010]弹飞绵羊(LCT维护链的size + 思维)
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4130998.html
Copyright © 2011-2022 走看看