[Leetcode]Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:mysql 连接池大小 编辑:程序博客网 时间:2024/05/16 15:21

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

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


/** * 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:    /*algorithm: BFS    use stack to reverse instead of reverse    */    void bfs(vector<vector<int>>&result,TreeNode* root){        queue<TreeNode*>Q;        if(root)Q.push(root);        bool flip = false;        while(!Q.empty()){            int size = Q.size();            vector<int>path;            stack<int>stk;            for(int i = 0;i < size;i++){                TreeNode* t = Q.front();Q.pop();                if(t->left)Q.push(t->left);                if(t->right)Q.push(t->right);                if(flip)stk.push(t->val);                else path.push_back(t->val);            }            if(flip){                while(!stk.empty()){                    path.push_back(stk.top());                    stk.pop();                }            }            flip = !flip;            result.push_back(path);        }    }    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {        vector<vector<int>>result;        vector<int>path;        bfs(result,root);        return result;    }};

/** * 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:    /*algorithm:bfs recursive     */    void preorder(vector<vector<int>>&result,TreeNode* root,int level){         if(!root)return;         if(result.size() <= level)            result.push_back(vector<int>());        if(level%2)//odd            result[level].insert(result[level].begin(),root->val);        else            result[level].push_back(root->val);        preorder(result,root->left,level+1);        preorder(result,root->right,level+1);    }    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {            vector<vector<int>>result;            preorder(result,root,0);            return result;    }};


0 0
原创粉丝点击