【leetcode】103.(Medium)Binary Tree Zigzag Level Order Traversal
阿新 • • 發佈:2018-12-27
解題思路:
維護兩個棧,輪番記錄每一層的結點
時間複雜度: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;
}
}
執行結果: