Binary Tree Zigzag Level Order Traversal——Difficulty:Medium

来源:互联网 发布:软件开发环境 编辑:程序博客网 时间:2024/04/23 20:07

Problem :

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).

Example:

For example:Given binary tree [3,9,20,null,null,15,7],    3   / \  9  20    /  \   15   7return its zigzag level order traversal as:[  [3],  [20,9],  [15,7]]

**

Algorithm:

**
很明显要用宽度优先遍历,因为这个题目要求要的输出很节点在的高度有关,所以普通的宽度优先遍历不行,在我下面的非递归方法中,需要给每一层后面加一个NULL来标明一层的结束,这样就可以明确什么时候进入了下一层。有N个节点,那么时间复杂度就是O(N)

**

Code:

/** * 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:    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {        vector<vector<int> > re;        if(root==NULL)            return re;        queue<TreeNode*> q;        q.push(root);        q.push(NULL);        int tag=1;        vector<int> v;        while(!q.empty())        {            TreeNode* t=q.front();q.pop();            if(t!=NULL)            {                v.push_back(t->val);                if(t->right)q.push(t->right);                if(t->left)q.push(t->left);            }            else            {                if(tag==0)                {                    re.push_back(v);                }                else                {                    reverse(v.begin(),v.end());                    re.push_back(v);                }                tag=!tag;                v.clear();                if(!q.empty())                q.push(NULL);            }        }        return re;    }};
0 0
原创粉丝点击