题目描述
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
解法1:双端队列deque
与101题类似。但每层扫描方向不同,所以可以采用双端队列,用heght变量明确当前层数,确定扫描方向。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
class Solution { public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> res; if(root==NULL) return res; deque<TreeNode *> que; que.push_back(root); int hight=0; TreeNode *p=new TreeNode(0); while(!que.empty()) { vector<int> temp; int n=que.size(); for(int i=0;i<n;i++) { if(hight%2==0) { p=que.front(); que.pop_front(); } else { p=que.back(); que.pop_back(); } temp.push_back(p->val); if(hight%2==1) { if(p->right!=NULL) que.push_front(p->right); if(p->left!=NULL) que.push_front(p->left); } else { if(p->left!=NULL) que.push_back(p->left); if(p->right!=NULL) que.push_back(p->right); } } res.push_back(temp); hight++; } return res; } };
|