LeetCode-103-二叉树的锯齿形层序遍历

LeetCode-103-二叉树的锯齿形层序遍历_第1张图片

1、BFS

我们可以利用队列来层序遍历整棵二叉树。为了实现利用队列遍历二叉树,我们在每次循环的开始是统计当前队列中的个数而后进行循环。在每次的循环当中,我们将当前节点的左右子节点加入队列中并在下一次循环中进行遍历。其中,为了实现锯齿形的层序遍历,我们需要判断当前深度是否为2的倍数,若为2的倍数则说明当前层的遍历需要进行逆序操作,我们将逆序操作后的数组加入最终结果当中。

class Solution {
public:
    vector<vector<int>> result;
    queue<TreeNode *> q;

    vector<vector<int>> zigzagLevelOrder(TreeNode *root) {
        int depth = 1;
        if (!root) return {};
        q.push(root);
        while (!q.empty()) {
            int currentLevelSize = q.size();
            vector<int> temp_res;
            for (int i = 0; i < currentLevelSize; ++i) {
                TreeNode *cur = q.front();
                q.pop();
                temp_res.emplace_back(cur->val);
                if (cur->left) q.push(cur->left);
                if (cur->right) q.push(cur->right);
            }
            if (depth % 2 == 0) reverse(temp_res.begin(), temp_res.end());
            ++depth;
            result.emplace_back(temp_res);
        }
        return result;
    }
};

你可能感兴趣的:(LeetCode刷题记录,leetcode,算法,职场和发展)