lintcode-二叉樹的鋸齒形層次遍歷-71
阿新 • • 發佈:2018-12-14
給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
例如:
給定二叉樹 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回鋸齒形層次遍歷如下:
[ [3], [20,9], [15,7] ]
思路:與樹的層次遍歷類似,只要額外設定一個判斷是否需要反轉的變數即可。
/** * 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; if(!root) return vec; bool rev = false; queue<TreeNode*> que; que.push(root); while(!que.empty()){ int count = que.size(); vector<int> base; while(count--){ TreeNode* temp = que.front(); que.pop(); base.push_back(temp->val); if(temp->left) que.push(temp->left); if(temp->right) que.push(temp->right); } if(rev) reverse(base.begin(),base.end()); rev = !rev; vec.push_back(base); } return vec; } };