二叉樹的鋸齒形層序遍歷(BFS / LeetCode)
阿新 • • 發佈:2020-12-23
題目連結
題目描述
給定一個二叉樹,返回其節點值的鋸齒形層序遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
例如:
給定二叉樹 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回鋸齒形層序遍歷如下:
[
[3],
[20,9],
[15,7]
]
思路
佇列實現層次遍歷最後根據結果下標的奇偶性調整順序即可。
程式碼如下:
class Solution {
public:
vector<vector< int>> zigzagLevelOrder(TreeNode* root) {
if(!root)
return vector<vector<int>>();
vector<vector<int>> ans;
queue<TreeNode *> q;
q.push(root);
int direction=0; //0代表從左往右,1代表從右往左
while(!q.empty()){
int len=q.size();
vector<int> tmp;
for(int i=0;i<len;i++){
auto node=q.front();
tmp.push_back(node->val);
if(node->left)
q.push(node->left);
if(node->right)
q. push(node->right);
q.pop();
}
ans.push_back(tmp);
}
for(int i=0;i<ans.size();i++)
if(i%2==1)
reverse(ans[i].begin(),ans[i].end());
return ans;
}
};