博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣题解-103. 二叉树的锯齿形层序遍历(广度优先搜索)
阅读量:4299 次
发布时间:2019-05-27

本文共 1299 字,大约阅读时间需要 4 分钟。

题目:103. 二叉树的锯齿形层序遍历

给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如:

给定二叉树 [3,9,20,null,null,15,7],

3   / \  9  20    /  \   15   7

返回锯齿形层序遍历如下:

[  [3],  [20,9],  [15,7]]

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

层次遍历采用广度优先搜索方法。从根节点开始搜索,每次遍历一层二叉树的节点,存储到列表中。在遍历每一层时,判断层数的即奇偶性,决定列表的顺序或逆序。

代码

/** * 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
> zigzagLevelOrder(TreeNode* root) {
vector
> ans; if (!root) {
return {
}; } int layer_num = 0; queue
que; que.push(root); layer_num = 1; while(!que.empty()) {
int size = que.size(); vector
level; while(size--) { TreeNode* node = que.front(); que.pop(); if (layer_num % 2) { level.push_back(node->val); } else { level.insert(level.begin(), node->val); } if (node->left) { que.push(node->left); } if (node->right) { que.push(node->right); } } ans.push_back(level); level.clear(); layer_num ++; } return ans; }};
你可能感兴趣的文章
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>
Overlay之VXLAN架构
查看>>
Eclipse : An error occurred while filtering resources(Maven错误提示)
查看>>
在eclipse上用tomcat部署项目404解决方案
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
suse如何修改ssh端口为2222?
查看>>
详细理解“>/dev/null 2>&1”
查看>>
suse如何创建定时任务?
查看>>
suse搭建ftp服务器方法
查看>>
centos虚拟机设置共享文件夹并通过我的电脑访问[增加smbd端口修改]
查看>>
文件拷贝(IFileOperation::CopyItem)
查看>>
MapReduce的 Speculative Execution机制
查看>>
大数据学习之路------借助HDP SANDBOX开始学习
查看>>
Hadoop基础学习:基于Hortonworks HDP
查看>>
为什么linux安装程序 都要放到/usr/local目录下
查看>>
Hive安装前扫盲之Derby和Metastore
查看>>
永久修改PATH环境变量的几种办法
查看>>
大数据学习之HDP SANDBOX开始学习
查看>>
Hive Beeline使用
查看>>