Leetcode103. 广度优先遍历+有换行型(每个深度需要操作))

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

给定二叉树 [3,9,20,null,null,15,7],


图片.png

返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]

思路:广度优先遍历,先将它们每个深度的数字压入vector中,需要两个变量的辅助,然后再将奇数行直接反序。(还有一种做法在压vector中通过队列pop_back\pop_front\ 切换前取后放,后取前放的逻辑来编程)

/**
 * 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:
    void reverse(vector &a){
        int tmp;
        for(int i=0;i> zigzagLevelOrder(TreeNode* root) {
        vector> res;
        if(!root) return res;
        deque a;
        a.push_back(root);
        bool signal=true;
        int to_print = 1;
        int next_level = 0;
        vector tmp;
        while(a.size()!=0){
            TreeNode*p = a.front();
                tmp.push_back(p->val);
                a.pop_front();
                if(p->left){
                    a.push_back(p->left);
                    ++next_level;
                }
                if(p->right){
                    a.push_back(p->right);
                    ++next_level;
                }

            --to_print;
            if(to_print==0){
                to_print = next_level;
                next_level = 0;
                res.push_back(tmp);
                tmp.clear();
            }
        }
        for(int i=0;i

你可能感兴趣的:(Leetcode103. 广度优先遍历+有换行型(每个深度需要操作)))