LeetCode103. 二叉樹的鋸齒形層序遍歷 C++版
阿新 • • 發佈:2020-12-24
題目
給定一個二叉樹,返回其節點值的鋸齒形層序遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
例如:
給定二叉樹 [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;
}
};