博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lintcode---二叉树的锯齿形层次遍历
阅读量:6689 次
发布时间:2019-06-25

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

给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 

样例

给出一棵二叉树 {3,9,20,#,#,15,7},

3   / \  9  20    /  \   15   7

返回其锯齿形的层次遍历为:

[  [3],  [20,9],  [15,7]] 思路:其实还是层次遍历的思想借助于辅助队列,在这里因为某些层需要逆序输出,所以设置一个标记位,并调用       容器的reverse()函数,将需要逆序的层逆序,这样就能得到锯齿形的层次遍历结果了。
/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this->right = NULL; *     } * } */ class Solution {    /**     * @param root: The root of binary tree.     * @return: A list of lists of integer include      *          the zigzag level order traversal of its nodes' values      */         /*    思路:其实还是层次遍历的思想,在这里因为某些层需要逆序输出,所以设置一个标记位,并调用容器的reverse()函数,将          需要逆序的层逆序,这样就能得到锯齿形的层次遍历结果了。    */public:    vector
> zigzagLevelOrder(TreeNode *root) { // write your code here vector
> vec; if(root==NULL){ return vec; } bool cur=false; queue
que; que.push(root); while(!que.empty()){ int count=que.size(); vector
vec_temp; while(count--){ TreeNode *temp=que.front(); que.pop(); vec_temp.push_back(temp->val); if(temp->left){ que.push(temp->left); } if(temp->right){ que.push(temp->right); } } if(cur){ reverse(vec_temp.begin(),vec_temp.end()); } cur=!cur; vec.push_back(vec_temp); } return vec; }};

 

转载地址:http://vbkoo.baihongyu.com/

你可能感兴趣的文章
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>
如何在Rancher Catalog中使用VMware Harbor
查看>>
13.C#--求1-100之间所有整数的和
查看>>
40.C#--面对对象,类的继承和构造函数继承的使用
查看>>
列表,元组,集合
查看>>
jquery easyui滚动条部分设置介绍
查看>>
cannot find -lxxx问题
查看>>
预防云端开源项目打包 Redis Labs再更改模块
查看>>
超惊人!去年发生的身分外泄安全事件是2017的4倍
查看>>
oracle sqlplus免安装的配置instantclient-basiclite
查看>>
Java开发GUI之选择列表
查看>>
一、分布式商城架构逻辑图
查看>>
find命令详解
查看>>
2018年的“核心期刊陷阱”已开启,你知道吗?2018年的“核心期刊陷阱”已开启,你知道吗?...
查看>>
rsync+shell脚本完成自动化备份
查看>>
如何衡量机器人用激光雷达的实用性和可靠性
查看>>
机器人是如何完成避障的?机器人避障解决方案解读
查看>>
利用思维导图软件绘制鱼骨图怎样做
查看>>
mac os 安装maven
查看>>