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

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

题目

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

例如:

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

3   / \  9  20    /  \   15   7

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

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

题解

这道题要求用z字型,就是要求知道深度。因为知道深度我们就可以根据深度的奇偶来判断如何打印。

首先相到的就是层序遍历,然后记录是第几层。层序遍历用队列的代码我们已经很熟悉了。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public List
> zigzagLevelOrder(TreeNode root) { List
> res = new LinkedList<>(); if (root == null) { return res; } LinkedList
queue = new LinkedList<>(); queue.add(root); int depth = 0; while (!queue.isEmpty()) { int size = queue.size(); LinkedList
currentRes = new LinkedList<>(); // 当前层一直出队. while (size > 0) { TreeNode current = queue.poll(); TreeNode left = current.left; TreeNode right = current.right; if (left != null) { queue.add(left); } if (right != null) { queue.add(right); } // 奇数层,从头添加; 偶数层从尾部添加. if (depth % 2 != 0) { currentRes.add(0, current.val); } else { currentRes.add(current.val); } size--; } // 把当前层遍历的结果加入到结果中. res.add(currentRes); depth++; } return res; }}

同之前一样,我们想一想有没有递归的解法.

我们可以采用先序遍历的方式,先遍历节点,然后递归的遍历左子树和右子树。
稍作改动的是,需要在遍历左子树和右子树的时候带上深度的信息,才能知道是加在列表头还是列表尾部。
递归的结束条件就是遇到空节点。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    public List
> zigzagLevelOrder(TreeNode root) { List
> res = new LinkedList<>(); if (root == null) { return res; } helper(res, root, 0); return res; } public void helper(List
> res,TreeNode root, int depth) { if (root == null) { return; } // 注意这里new List, 说明当前节点递归进入了新的层. if (res.size() <= depth) { res.add(new LinkedList<>()); } if (depth % 2 != 0) { res.get(depth).add(0, root.val); } else { res.get(depth).add(root.val); } helper(res, root.left, depth + 1); helper(res, root.right, depth + 1); }}

热门阅读

Leetcode名企之路

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

你可能感兴趣的文章
js实现页面跳转的几种方式
查看>>
sbt笔记一 hello-sbt
查看>>
常用链接
查看>>
pitfall override private method
查看>>
!important 和 * ----hack
查看>>
聊天界面图文混排
查看>>
控件的拖动
查看>>
svn eclipse unable to load default svn client的解决办法
查看>>
Android.mk 文件语法详解
查看>>
QT liunx 工具下载
查看>>
内核源码树
查看>>
Java 5 特性 Instrumentation 实践
查看>>
AppScan使用
查看>>
Java NIO框架Netty教程(三) 字符串消息收发(转)
查看>>
Ucenter 会员同步登录通讯原理
查看>>
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>
JavaScript 基础(九): 条件 语句
查看>>
Linux系统固定IP配置
查看>>