zoukankan      html  css  js  c++  java
  • Leetcode 103

    /**
     * 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>> zigzagLevelOrder(TreeNode* root) { stack<TreeNode*> st; vector<vector<int>> res; vector<int> first; if(root == NULL){ return res; } else{ first.push_back(root->val); res.push_back(first); } st.push(root); int flag = 0; while(!empty(st)){ vector<int> tres; queue<TreeNode*> que; while(!empty(st)){ TreeNode* temp = st.top(); que.push(temp); st.pop(); } if(flag%2 == 0){ while(!empty(que)){ TreeNode* temp = que.front(); if(temp->right != NULL){ st.push(temp->right); tres.push_back(temp->right->val); } if(temp->left != NULL){ st.push(temp->left); tres.push_back(temp->left->val); } que.pop(); } } if(flag%2 == 1){ while(!empty(que)){ TreeNode* temp = que.front(); if(temp->left != NULL){ st.push(temp->left); tres.push_back(temp->left->val); } if(temp->right != NULL){ st.push(temp->right); tres.push_back(temp->right->val); } que.pop(); } } flag++; if(tres.size()) res.push_back(tres); } return res; } };

    上面是把stack转移到一个queue中

    下面是利用两个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> > zigzagLevelOrder(TreeNode *root) {
            vector<vector<int> >res;
            if (!root) return res;
            stack<TreeNode*> s1;
            stack<TreeNode*> s2;
            s1.push(root);
            vector<int> out;
            while (!s1.empty() || !s2.empty()) {
                while (!s1.empty()) {
                    TreeNode *cur = s1.top();
                    s1.pop();
                    out.push_back(cur->val);
                    if (cur->left) s2.push(cur->left);
                    if (cur->right) s2.push(cur->right);
                } 
                if (!out.empty()) res.push_back(out);
                out.clear();
                while (!s2.empty()) {
                    TreeNode *cur = s2.top();
                    s2.pop();
                    out.push_back(cur->val);
                    if (cur->right) s1.push(cur->right);
                    if (cur->left) s1.push(cur->left);
                }
                if (!out.empty()) res.push_back(out);
                out.clear();
            }
            return res;
        }
    };
  • 相关阅读:
    jquery处理鼠标左中右键事件
    bootstrap弹出框
    移动端去掉a标签点击时出现的背景
    sessionStorage
    页面滑动到最下面,执行代码
    判断页面时向上滚动还是向下滚动
    sql 时间查询 /sql中判断更新或者插入/查询一年所有双休日
    求取最大值
    Repeater 获取数据值
    加载完毕后执行计算
  • 原文地址:https://www.cnblogs.com/cunyusup/p/10323283.html
Copyright © 2011-2022 走看看