103. Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:usb端口定义 编辑:程序博客网 时间:2024/06/05 05:04
题目:Binary Tree Zigzag Level Order Traversal
原题描述
原题链接:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/#/description
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,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; }};
0 0
- 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
- 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
- HBase编程api介绍(转)
- 常用css样式
- hbase的查询scan功能注意点(setStartRow, setStopRow)
- Notification中显示进度条
- 安装redis和phpredis模块
- 103. Binary Tree Zigzag Level Order Traversal
- java位移运算导致数值为负数
- 编译OpenCV 3.2
- Linux下增加swap虚拟内存(转)
- redis机器物理死机问题分析(OOM)
- HBase浅谈
- sysbench性能测试工具
- SpringMVC 入门------ 第一个SpringMVC框架的JavaWeb项目
- Linux下设置MySQL主从复制备份服务。