Skip to content

Latest commit

 

History

History
60 lines (53 loc) · 1.41 KB

103_二叉树的锯齿形层次遍历.md

File metadata and controls

60 lines (53 loc) · 1.41 KB

103. 二叉树的锯齿形层次遍历

问题

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

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

    3
   / \
  9  20
    /  \
   15   7
返回锯齿形层次遍历如下:

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

解答

实际上就是层次遍历一颗二叉树,然后再将奇数层reverse一下。用递归的方法来实现比较简单,只需要加上一个变量depth来记录深度就行。

/**
 * 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>> vec;
        solve(vec, root, 0);
        for (int i = 1; i < vec.size(); i += 2) {
            reverse(vec[i].begin(), vec[i].end());
        }
        return vec;
    }
    
    void solve(vector<vector<int>> &vec, TreeNode* node, int depth) {
        if (node == nullptr) {
            return;
        }
        if (vec.size() <= depth) {
            vec.push_back(vector<int>());
        }
        vec[depth].push_back(node->val);
        solve(vec, node->left, depth+1);
        solve(vec, node->right, depth+1);
    }
};