【leetcode 层序遍历】Binary Tree Zigzag Level Order Traversal
2014-11-16 21:17
531 查看
1、题目
Given 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,#,#,15,7},
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
2、分析
本题是层序遍历的变形,按“之字形”遍历,其实就是隔一层就把节点反过来遍历:第一层正常遍历,第二行反过来遍历,第三行正常,第四行又反过来,如此交替。跟上两题本质一样:【leetcode 层序遍历】Binary Tree Level Order Traversal
只需要另外设置一个变量flag,用于判断当前层需不需要反过来遍历。
3、代码
<span style="font-size:18px;">class Solution { public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { vector<vector<int>> result; if(!root) return result; vector<int> levelNode; queue<TreeNode *> currentQueue,nextQueue; TreeNode *currentNode=root; currentQueue.push(currentNode); bool flag=false; while(!currentQueue.empty()) { while(!currentQueue.empty()) /*存放当前层节点的队列不为空,则不断地取出队首节点,同时把下一层节点存进next队列*/ { currentNode=currentQueue.front(); currentQueue.pop(); levelNode.push_back(currentNode->val); if(currentNode->left) nextQueue.push(currentNode->left); if(currentNode->right) nextQueue.push(currentNode->right); } /*增加两行,判断该层的节点val需不需要反转,第一行不需要,第二行需要,第三行不需要,第四行需要...交替进行*/ if(!flag) flag=true; else{ reverse(levelNode.begin(),levelNode.end()); flag=false; } result.push_back(levelNode); levelNode.clear(); swap(currentQueue,nextQueue); } return result; } };</span>
相关文章推荐
- 【LeetCode】Binary Tree Zigzag Level Order Traversal--- 层序遍历二叉树
- LeetCode 103 Binary Tree Zigzag Level Order Traversal(二叉树层序遍历)
- leetcode Binary Tree Zigzag Level Order Traversal 层序遍历 双队列
- Binary Tree Zigzag Level Order Traversal (LeetCode) 层序遍历二叉树
- [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二
- [LeetCode] Binary Tree Level Order Traversal 二叉树层序遍历
- leetcode---Binary Tree Zigzag Level Order Traversal---层次遍历
- leetcode-Binary Tree Level Order Traversal 二叉树层序遍历
- Binary Tree Zigzag Level Order Traversal,bfs,层序遍历
- 【LeetCode】Binary Tree Level Order Traversal(层序遍历)
- 【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】
- LeetCode | Binary Tree Zigzag Level Order Traversal(二叉树锯齿形层序输出)
- 【LeetCode】Binary Tree Level Order Traversal--(二叉树层序遍历)
- 【LeetCode-面试算法经典-Java实现】【107-Binary Tree Level Order Traversal II(二叉树层序遍历II)】
- Leetcode 103 ,Binary Tree Zigzag Level Order Traversal(二叉树Z形分层遍历)
- LeetCode | Binary Tree Level Order Traversal II(二叉树层序遍历II)
- LeetCode(Binary Tree Level Order Traversal, 2,Zigzag)二叉树的层次遍历
- 【leetcode 层序遍历】Binary Tree Level Order Traversal II
- 【LeetCode笔记】Binary Tree Zigzag Level Order Traversal 二叉树Z字形遍历
- 【LeetCode-面试算法经典-Java实现】【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】