错误的做法:
截图可能有点小,大概的做法是根据奇偶的层使用倒插法,
由于leetcode非得绑定手机号,于是只能作罢
首先说说这个人人的做法,简直是。。。。。一言难尽!有这闲工夫用队列的倒插法,还不如用更容易的想法:根据奇偶反转lis呢!
这种做法简直是为了做题而做题,题目的意思很明显,是让我们找一种遍历的方式,说了这么多,主要还是想说leetcode上的答案坑也多,还是要结合多方面的知识判断。
正确的做法:使用两个栈
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> listList = new ArrayList<>();
if (root == null) {
return listList;
}
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
TreeNode node = root;
stack1.add(root);
List<Integer> tempList = new ArrayList<>();
while (!stack1.isEmpty()) {
while (!stack1.isEmpty()){
node = stack1.pop();
tempList.add(node.val);
if(node.left!=null){
stack2.push(node.left);
}
if(node.right!=null){
stack2.push(node.right);
}
}
if(!tempList.isEmpty()){
listList.add(new ArrayList<>(tempList));
}
tempList.clear();
while (!stack2.isEmpty()){
node = stack2.pop();
tempList.add(node.val);
if(node.right!=null){
stack1.push(node.right);
}
if(node.left!=null){
stack1.push(node.left);
}
}
if(!tempList.isEmpty()){
listList.add(new ArrayList<>(tempList));
}
tempList.clear();
}
return listList;
}
}