【leetcode】103.(Medium)Binary Tree Zigzag Level Order Traversal

解题思路:
维护两个栈,轮番记录每一层的结点

时间复杂度: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;
	    }
	}

运行结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/AXIMI/article/details/85273644
今日推荐