Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:007支票打印软件 编辑:程序博客网 时间:2024/04/30 09:30

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]]
本质和BFS一样,就是需要判断是否从右向左输出。设置个标志位就行。

(用deque比较方便,能够从头和尾分别压入)


vector<vector<int> > zigzagLevelOrder(TreeNode *root){    vector<vector<int> > ans;    if ( !root )        return ans;    int flag=0;    deque<int> level;    vector<TreeNode*> cur,next;    cur.push_back(root);    while(!cur.empty())    {        level.clear();        next.clear();        for(int start=0;start < cur.size();start++)        {            TreeNode* tmp=cur[start];            if (flag%2)                level.push_front(tmp->val);            else                level.push_back(tmp->val);            if ( tmp->left )                next.push_back(tmp->left);            if ( tmp->right)                next.push_back(tmp->right);        }        ans.push_back(vector<int>(level.begin(),level.end()));        cur=next;        flag++;    }    return ans;}


0 0