leetCode 103.Binary Tree Zigzag Level Order Traversal (二叉树Z字形水平序) 解题思路和方法
2015-08-01 20:17
423 查看
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
return its zigzag level order traversal as:
思路:与二叉树水平序解题思路差不多,得到水平序结果之后,再对偶数链表反转即可。‘
代码如下:
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] ]
思路:与二叉树水平序解题思路差不多,得到水平序结果之后,再对偶数链表反转即可。‘
代码如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { List<List<Integer>> list = new ArrayList<List<Integer>>(); public List<List<Integer>> zigzagLevelOrder(TreeNode root) { dfs(0,root); //每隔1行交换顺序 for(int i = 1; i < list.size(); i = i+2){ List<Integer> al = list.get(i); int len = al.size(); //倒序交换 for(int j = 0; j + j < len-1; j++){ int k = al.get(j); al.set(j, al.get(len-1-j)); al.set(len-1-j, k); } } return list; } /** * 中序遍历,根据深度添加list * @param dep 树的深度 * @param root 根节点 */ private void dfs(int dep,TreeNode root){ if(root == null){ return; } List<Integer> al;//根据情况得到al值 if(list.size() > dep){ al = list.get(dep); }else{ al = new ArrayList<Integer>(); list.add(al); } dfs(dep+1,root.left); al.add(root.val); dfs(dep+1,root.right); } }
相关文章推荐
- JavaScript中的parseInt和Number函数
- 使用 Spring Data JPA 简化 JPA 开发
- 领域驱动设计战略原则
- YouCompleteMe安装
- 创建音乐盒播放器
- 两圆相交面积计算
- UVA 129
- SQL Server 2016 CTP2.2 的关键特性
- Java设计模式:工厂模式举例
- 读书笔记-《人人都是产品经理》,重读
- Java基本语法--程序流程控制
- [精通iOS开发(第5版)]第21章 集合视图 笔记
- 在eclipse中使用Lombok
- tomcat之jvm分析
- MySQL的InnoDB索引原理详解 (转)
- codeforces 505 D Mr. Kitayuta's Technology
- uva 673 Parentheses Balance(栈)
- BP神经网络设计常用的基本方法和实用技术
- 一个工程师该如何高效工作
- Linux vsftpd移植笔记