1. 程式人生 > >LeetCode--103. Binary Tree Zigzag Level Order Traversal

LeetCode--103. Binary Tree Zigzag Level Order Traversal

題目連結:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/

這個是接著上一篇寫的,思路有點像,不過要新增一個標誌符來判斷是從左往右加入連結串列中,還是從右往左,這個跟上一篇差不多。我用的是層序數的奇偶性,也可以用邏輯變數。這裡不贅述!

程式碼如下:

class Solution {
    public static List<List<Integer>> zigzagLevelOrder(TreeNode root) {
    
		List<List<Integer>> ans=new LinkedList<List<Integer>>();
        if(root==null)
        	return ans;
		Queue<TreeNode> q=new LinkedList<TreeNode>();
		q.add(root);
		int nums=1;
		int next_nums=0;
		int depth=1;
		while(!q.isEmpty())
		{
			List<Integer> tmp_list=new LinkedList<Integer>();
			if(depth%2!=0)
			{
				for(int k=nums;k>0;k--)
				{
					TreeNode tmp=q.poll();
					tmp_list.add(tmp.val);
					if(tmp.left!=null)
					{
						q.add(tmp.left);
						next_nums++;
					}
					if(tmp.right!=null)
					{
						q.add(tmp.right);
						next_nums++;
					}
				}
			}
			else
			{
				for(int k=nums;k>0;k--)
				{
					TreeNode tmp=q.poll();
					tmp_list.add(0,tmp.val);
					if(tmp.left!=null)
					{
						q.add(tmp.left);
						next_nums++;
					}
					if(tmp.right!=null)
					{
						q.add(tmp.right);
						next_nums++;
					}
				}
			}
			ans.add(tmp_list);
			nums=next_nums;
			next_nums=0;
			depth++;
		}
		return ans;
    }
}