题目链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal/
题面
都是中文,略
思路
正常层序遍历,但是在把每层的答案加入List的时候,要根据层数来改变加入的方向。
感觉这种方法并不是什么锯齿形层序遍历,有点像是在凑答案,但暂时没有了解到其他方案。
code
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
LinkedList<MyNode> list = new LinkedList<>();
List<List<Integer>> ans = new LinkedList<>();
if (root == null) return ans;
LinkedList<Integer> tmp = new LinkedList<>();
int currentLevel = 0;
list.addLast(new MyNode(root, 0));
while (list.size() != 0) {
MyNode node = list.pollFirst();
if (node.level != currentLevel) {
currentLevel++;
ans.add(tmp);
tmp = new LinkedList<>();
}
if (currentLevel % 2 == 0)
tmp.addLast(node.treeNode.val);
else
tmp.addFirst(node.treeNode.val);
if (node.treeNode.left != null)
list.addLast(new MyNode(node.treeNode.left, node.level+1));
if (node.treeNode.right != null)
list.addLast(new MyNode(node.treeNode.right, node.level+1));
}
ans.add(tmp);
return ans;
}
class MyNode {
TreeNode treeNode;
int level;
public MyNode(TreeNode treeNode, int level) {
this.treeNode = treeNode;
this.level = level;
}
}
}