1. 程式人生 > 其它 >二叉樹的鋸齒形層序遍歷(BFS / LeetCode)

二叉樹的鋸齒形層序遍歷(BFS / LeetCode)

技術標籤:佇列leetcode二叉樹資料結構

題目連結

題目描述

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

例如:
給定二叉樹 [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; } };