1. 程式人生 > 其它 >LeetCode103. 二叉樹的鋸齒形層序遍歷 C++版

LeetCode103. 二叉樹的鋸齒形層序遍歷 C++版

技術標籤:LeetCodec++

題目
給定一個二叉樹,返回其節點值的鋸齒形層序遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。

例如:
給定二叉樹 [3,9,20,null,null,15,7],
在這裡插入圖片描述

返回鋸齒形層序遍歷如下:

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

思路
本題是二叉樹的層序遍歷的變形,區別在於本題是一行從左到右遍歷,下一行從右到左遍歷,交叉往返的之字形遍歷。
可以利用層序遍歷,增加一個變數cnt來記錄當前的層數(cnt從0開始),將所有的奇數層的節點值進行翻轉一下。

c++程式碼

class Solution {
public:
    vector<
vector<int>> zigzagLevelOrder(TreeNode* root) { if(!root) return {}; vector<vector<int>> res; queue<TreeNode *> q{{root}}; int cnt = 0; while(!q.empty()){ vector<int> oneLevel; for(int i = q.
size(); i > 0; i-- ){ TreeNode * t = q.front(); q.pop(); oneLevel.push_back(t->val); if(t->left) q.push(t->left); if(t->right) q.push(t->right); } if
(cnt % 2 == 1) reverse(oneLevel.begin(), oneLevel.end()); res.push_back(oneLevel); cnt++; } return res; } };