LeetCode - Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between). For example: Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 return its zigzag level order traversal as: [ [3], [20,9], [15,7] ]
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> list = new ArrayList<List<Integer>>(); if (root == null) { return list; } boolean fromLeft = true; Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { fromLeft = !fromLeft; Queue<TreeNode> levelQueue = new LinkedList<>(); List<Integer> levelList = new ArrayList<>(); while(!queue.isEmpty()) { TreeNode node = queue.remove(); levelList.add(node.val); if (fromLeft) { if(node.left != null) {levelQueue.add(node.left);} if(node.right != null) {levelQueue.add(node.right);} } else{ if(node.right != null) {levelQueue.add(node.right);} if(node.left != null) {levelQueue.add(node.left);} } } list.add(levelList); if (!levelQueue.isEmpty()) { queue = levelQueue; } } return list; } }
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<List<Integer>>(); if (root == null) { return res; } List<TreeNode> list = new ArrayList<>(); boolean odd = true; list.add(root); while(!list.isEmpty()) { List<TreeNode> levelList = new LinkedList<>(); List<Integer> levelRes = new ArrayList<>(); if (odd) { for(int i = 0; i < list.size(); i++) { levelRes.add(list.get(i).val); if(list.get(i).left != null) { levelList.add(list.get(i).left); } if(list.get(i).right != null) { levelList.add(list.get(i).right); } } } else{ for(int i = list.size()-1; i >=0; i--) { levelRes.add(list.get(i).val); if(list.get(i).right != null) { levelList.add(0, list.get(i).right); } if(list.get(i).left != null) { levelList.add(0, list.get(i).left); } } } odd = !odd; res.add(levelRes); list = levelList; } return res; } }
posted on 2020-03-26 09:11 IncredibleThings 阅读(155) 评论(0) 编辑 收藏 举报