LeetCode:Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:餐饮电脑收银软件 编辑:程序博客网 时间:2024/05/16 05:46

题目描述:

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]]

思路分析:层序遍历二叉树。设置一个标志变量r来表示当前层是奇数层还是偶数层。当处于偶数数层时,将当前层得到的序列反转后再插入到层序遍历的序列中,奇数层则直接插入。层序遍历结束后即得到结果。


代码:

vector<vector<int> > Solution::zigzagLevelOrder(TreeNode *root){    vector<vector<int> > result;    vector<int> sequence;    bool r = false;    TreeNode * flag = new TreeNode(0);    queue<TreeNode *> treenode_queue;    if(root == NULL)        return result;    treenode_queue.push(root);    treenode_queue.push(flag);    while(treenode_queue.size() >= 1)    {        TreeNode * node = treenode_queue.front();        treenode_queue.pop();        if(node == flag)        {            if(r)            {                reverse(sequence.begin(),sequence.end());            }            r = !r;            result.push_back(sequence);            sequence.clear();            if(treenode_queue.empty())                break;            treenode_queue.push(flag);        }        else        {            sequence.push_back(node->val);            if(node->left != NULL)                treenode_queue.push(node->left);            if(node->right != NULL)                treenode_queue.push(node->right);        }    }    return result;}


0 0
原创粉丝点击