内容简介:给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,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<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
if (root == null) {
return res;
}
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
int depth = 0;
while (!queue.isEmpty()) {
int size = queue.size();
LinkedList<Integer> 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<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
if (root == null) {
return res;
}
helper(res, root, 0);
return res;
}
public void helper(List<List<Integer>> 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】103. 二叉树的锯齿形层次遍历》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Chinese Authoritarianism in the Information Age
Routledge / 2018-2-13 / GBP 115.00
This book examines information and public opinion control by the authoritarian state in response to popular access to information and upgraded political communication channels among the citizens in co......一起来看看 《Chinese Authoritarianism in the Information Age》 这本书的介绍吧!