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;
        }
    };
  • 相关阅读:
    Windows7下安装与破解IntelliJ IDEA2017
    Maven的目录结构和常用命令
    Maven三种仓库的配置
    Maven的安装
    Maven是什么
    SQL执行计划分析2
    SQL执行计划分析
    PHP 单点登录实现方案
    PHP消息队列实现及应用
    fastAdmin根据状态显示是否显示操作按钮
  • 原文地址:https://www.cnblogs.com/cunyusup/p/10323283.html
Copyright © 2011-2022 走看看