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

    题目链接

    Binary Tree Zigzag Level Order Traversal - LeetCode

    注意点

    • 不要访问空结点

    解法

    解法一:递归,递归,在Binary Tree Level Order Traversal - LeetCode的基础上将奇数层(下标从0开始)结果逆序即可。

    /**
     * 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:
        typedef vector<vector<int>> v;
        typedef TreeNode* node;
        void bfs(int level,node n,v& ret)
        {
            if(ret.size() == level) ret.push_back({});
            ret[level].push_back(n->val);
            if(n->left) bfs(level+1,n->left,ret);
            if(n->right) bfs(level+1,n->right,ret);
        }
        vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
            v ret;
            if(!root) return ret;
            bfs(0,root,ret);
            int i = 0,n = ret.size();
            for(i = 0;i < n;i++)
            {
                if(i%2 == 1) reverse(ret[i].begin(),ret[i].end());
            }
            return ret;
        }
    };
    

    解法二:非递归,同样在Binary Tree Level Order Traversal - LeetCode的基础上访问到奇数层时结果逆序即可。

    /**
     * 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:
        typedef vector<vector<int>> v;
        typedef TreeNode* node;
        vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
            v ret;
            if(!root) return ret;
            int level = 0;
            queue<node> q;
            q.push(root);
            while(!q.empty())
            {
                vector<int> aLevel;
                for(int i = q.size();i > 0;--i)
                {
                    node n = q.front();
                    q.pop();
                    aLevel.push_back(n->val);
                    if(n->left) q.push(n->left);
                    if(n->right) q.push(n->right);
                }
                if(level%2 == 1) reverse(aLevel.begin(),aLevel.end());
                ret.push_back(aLevel);
                level++;
            }
            return ret;
        }
    };
    

    小结

  • 相关阅读:
    poj2752Seek the Name, Seek the Fame【kmp next数组应用】
    poj1961Period【kmp next数组】
    poj2406(kmp next数组)
    KMP原理
    0529
    0428
    2045年4月25日
    0421
    黄金连分数【大数】
    学习linux内核时常碰到的汇编指令(1)
  • 原文地址:https://www.cnblogs.com/multhree/p/10558748.html
Copyright © 2011-2022 走看看