103. Binary Tree Zigzag Level Order Traversal
2017-03-16 22:24
435 查看
题目:Binary Tree Zigzag Level Order Traversal
原题描述
原题链接:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/#/descriptionGiven a binary tree, return the zigzag level order traversal of its nodes’ values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7],
return its zigzag level order traversal as:
[[3],[20,9], [15,7]]
给出一颗二叉树,返回对二叉树进行Z字形层序遍历的结果。每一层的数据作为一个数组输出。
Z字形层序遍历就是,比如第一层层序遍历的顺序是从左到右,第二层就从右到左,第三层从左到右,依次循环往复。
例:二叉树如上图,则遍历结果是[[3],[20,9], [15,7]]
思路
http://blog.csdn.net/gcs6564157/article/details/62451157和这一题的思路很像,只不过是需要每隔一层就反转一下数组。可以用一个cnt记录当前层数,初始第0层,每遍历到新的一层cnt+1,当cnt & 1为真时就反转数组。
参考代码
/** * 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>> ans; if(!root) return ans; vector<int> temp; queue<TreeNode*> q; q.push(root); int cnt = 0; TreeNode* firstLeft = NULL; bool findFirst = false; while(!q.empty()) { TreeNode* front = q.front(); q.pop(); if(front == firstLeft) { if(cnt & 1) { reverse(temp.begin(), temp.end()); } ans.push_back(temp); temp.clear(); firstLeft = NULL; findFirst = false; cnt++; } temp.push_back(front->val); if(front->left) { if(!findFirst) { firstLeft = front->left; findFirst = true; } q.push(front->left); } if(front->right) { if(!findFirst) { firstLeft = front->right; findFirst = true; } q.push(front->right); } } if(cnt & 1) { reverse(temp.begin(), temp.end()); } ans.push_back(temp); return ans; } };
相关文章推荐
- 103. Binary Tree Zigzag Level Order Traversal -----层序遍历
- 103. Binary Tree Zigzag Level Order Traversal
- Tree-----宽度优先遍历2(103. Binary Tree Zigzag Level Order Traversal)
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- Middle-题目70:103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal LeetCode
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal
- 103. Binary Tree Zigzag Level Order Traversal