LeetCode OJ - Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:计算机服装排版软件 编辑:程序博客网 时间:2024/06/02 01:35

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 binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {    vector<vector<int> > ret;public:    vector<vector<int> > zigzagLevelOrder(TreeNode *root) {        if(!root) return vector<vector<int> > ();        int direct = 0;                queue<TreeNode *> que;        queue<TreeNode *> next;                vector<int> item;        que.push(root);        while(!que.empty()) {            TreeNode *cur = que.front();            que.pop();            //访问cur            item.push_back(cur->val);            if(cur->left) next.push(cur->left);                       if(cur->right) next.push(cur->right);                         if(que.empty()) {                if(direct % 2) {                    reverse(item);                }                direct++;                ret.push_back(item);                item.clear();                swap(que, next);            }                    }                return ret;    }        void reverse(vector<int> &item) {        if(item.size() == 0) return ;        int x1 = 0, x2 = item.size() - 1;        while(x1 <= x2) {            swap(item[x1], item[x2]);            x1++, x2--;        }    }};






0 0
原创粉丝点击