package com.dsa.trees; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.LinkedList; import java.util.List; import java.util.Queue; public class LevelOrderTraversal { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"))) { String[] elements = reader.readLine().trim().split(","); Queue queue = new LinkedList<>(); TreeNode root = new TreeNode(Integer.parseInt(elements[0])); queue.offer(root); int index = 1; while (!queue.isEmpty() && index < elements.length) { TreeNode node = queue.poll(); if (!elements[index].equalsIgnoreCase("null")) { node.left = new TreeNode(Integer.parseInt(elements[index])); queue.offer(node.left); } index++; if (!elements[index].equalsIgnoreCase("null")) { node.right = new TreeNode(Integer.parseInt(elements[index])); queue.offer(node.right); } index++; } List> list = levelOrderBottom(root); for (List level : list) { System.out.println(level); } } catch (IOException e) { throw new RuntimeException(e); } } public static List> levelOrder(TreeNode root) { List> res = new LinkedList<>(); if (root == null) return res; Queue queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { List list = new LinkedList<>(); int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); list.add(node.val); if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); } res.add(list); } return res; } public static List> levelOrderBottom(TreeNode root) { List> res = new LinkedList<>(); if (root == null) return res; Queue queue = new LinkedList<>(); queue.offer(root); while (!queue.isEmpty()) { List list = new LinkedList<>(); int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); list.add(node.val); if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); } res.addFirst(list); } return res; } }