LeetCode 103. Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:安卓软件开发编程论坛 编辑:程序博客网 时间:2024/06/18 15:26

103. Binary Tree Zigzag Level Order Traversal

Description

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,null,null,15,7],

    3   / \  9  20    /  \   15   7

return its zigzag level order traversal as:

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

思路

Z 字型层序遍历二叉树,和普通的层序遍历差不多。只是在存储和输出每层的数据时要注意一下。

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) {        if (root == NULL) return {};        deque<TreeNode*> dq;        vector<vector<int>> ret;        dq.push_back(root);        int level = 0;        while( !dq.empty() ) {            int cur_size = dq.size();            vector<int> tmp;            std::reverse(dq.begin(), dq.end());            if (level % 2 == 0) {                for (int i = 0; i < cur_size; i++) {                    TreeNode* node = dq.front();                    tmp.push_back(node->val);                    dq.pop_front();                    if (node->left) dq.push_back(node->left);                    if (node->right) dq.push_back(node->right);                }            }            else {                for (int i = 0; i < cur_size; i++) {                    TreeNode * node = dq.front();                    tmp.push_back(node->val);                    dq.pop_front();                    if (node->right) dq.push_back(node->right);                    if (node->left) dq.push_back(node->left);                }            }            ret.push_back(tmp);            level++;        }        return ret;    }};

分析

时间复杂度:O(V+E)

空间复杂度:O(V+E)

ps:这道题在百度面试的时候考过