解题思路:
维护两个栈,轮番记录每一层的结点
时间复杂度:O(n)
空间复杂度:O(n)
提交代码:
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res=new ArrayList<List<Integer>>();
if(root==null) return res;
Stack<TreeNode> s1=new Stack<>();
Stack<TreeNode> s2=new Stack<>();
s1.push(root);
while(s1.size()!=0||s2.size()!=0) {
List<Integer> level1=new ArrayList<Integer>();
while(s1.size()!=0) {
TreeNode tmp=s1.pop();
level1.add(tmp.val);
if(tmp.left!=null)
s2.push(tmp.left);
if(tmp.right!=null)
s2.push(tmp.right);
}
if(level1.size()!=0)
res.add(level1);
List<Integer> level2=new ArrayList<>();
while(s2.size()!=0) {
TreeNode tmp=s2.pop();
level2.add(tmp.val);
if(tmp.right!=null)
s1.add(tmp.right);
if(tmp.left!=null)
s1.add(tmp.left);
}
if(level2.size()!=0)
res.add(level2);
}
return res;
}
}
运行结果: