From 1e52ba37c31c7af29e2c36e6b93193f052ca9da6 Mon Sep 17 00:00:00 2001 From: Miki Pokryvailo Date: Thu, 28 Sep 2017 14:11:35 -0400 Subject: [PATCH 1/2] Added level order traversal, and more nodes in main method --- data_structures/Trees/TreeTraversal.java | 36 ++++++++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/data_structures/Trees/TreeTraversal.java b/data_structures/Trees/TreeTraversal.java index c4ff92d03baa..8e73134e17d9 100644 --- a/data_structures/Trees/TreeTraversal.java +++ b/data_structures/Trees/TreeTraversal.java @@ -1,3 +1,5 @@ +import java.util.LinkedList; + /** * * @author Varun Upadhyay (https://github.com/varunu28) @@ -9,19 +11,27 @@ public class TreeTraversal { public static void main(String[] args) { Node tree = new Node(5); tree.insert(3); + tree.insert(2); tree.insert(7); + tree.insert(4); + tree.insert(6); + tree.insert(8); - // Prints 3 5 7 - tree.printInOrder(); + System.out.println("Pre order traversal:"); + tree.printPreOrder(); System.out.println(); - // Prints 5 3 7 - tree.printPreOrder(); + System.out.println("In order traversal:"); + tree.printInOrder(); System.out.println(); - // Prints 3 7 5 + System.out.println("Post order traversal:"); tree.printPostOrder(); System.out.println(); + + System.out.println("Level order traversal:"); + tree.printLevelOrder(); + System.out.println(); } } @@ -88,5 +98,19 @@ public void printPostOrder() { } System.out.print(data + " "); } -} + public void printLevelOrder() { + LinkedList queue = new LinkedList<>(); + queue.add(this); + while (queue.size() > 0) { + Node head = queue.remove(); + System.out.print(head.data + " "); + if (head.left != null) { + queue.add(head.left); + } + if (head.right != null) { + queue.add(head.right); + } + } + } +} From 6823278618d33305925505768af5bda570ced182 Mon Sep 17 00:00:00 2001 From: Miki Pokryvailo Date: Thu, 5 Oct 2017 16:27:54 -0400 Subject: [PATCH 2/2] Added comments to level order traversal method, and samples in main method. --- data_structures/Trees/TreeTraversal.java | 59 +++++++++++++----------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/data_structures/Trees/TreeTraversal.java b/data_structures/Trees/TreeTraversal.java index 8e73134e17d9..1db0c6e81c01 100644 --- a/data_structures/Trees/TreeTraversal.java +++ b/data_structures/Trees/TreeTraversal.java @@ -1,10 +1,10 @@ import java.util.LinkedList; /** - * - * @author Varun Upadhyay (https://github.com/varunu28) - * - */ +* +* @author Varun Upadhyay (https://github.com/varunu28) +* +*/ // Driver Program public class TreeTraversal { @@ -17,18 +17,19 @@ public static void main(String[] args) { tree.insert(6); tree.insert(8); + // Prints 5 3 2 4 7 6 8 System.out.println("Pre order traversal:"); tree.printPreOrder(); System.out.println(); - + // Prints 2 3 4 5 6 7 8 System.out.println("In order traversal:"); tree.printInOrder(); System.out.println(); - + // Prints 2 4 3 6 8 7 5 System.out.println("Post order traversal:"); tree.printPostOrder(); System.out.println(); - + // Prints 5 3 7 2 4 6 8 System.out.println("Level order traversal:"); tree.printLevelOrder(); System.out.println(); @@ -36,12 +37,13 @@ public static void main(String[] args) { } /** - * The Node class which initializes a Node of a tree - * Consists of all 3 traversal methods: printInOrder, printPostOrder & printPreOrder - * printInOrder: LEFT -> ROOT -> RIGHT - * printPreOrder: ROOT -> LEFT -> RIGHT - * printPostOrder: LEFT -> RIGHT -> ROOT - */ +* The Node class which initializes a Node of a tree +* Consists of all 3 traversal methods: printInOrder, printPostOrder & printPreOrder +* printInOrder: LEFT -> ROOT -> RIGHT +* printPreOrder: ROOT -> LEFT -> RIGHT +* printPostOrder: LEFT -> RIGHT -> ROOT +* printLevelOrder: Prints by level (starting at root), from left to right. +*/ class Node { Node left, right; int data; @@ -99,18 +101,23 @@ public void printPostOrder() { System.out.print(data + " "); } + /** + * O(n) time algorithm. + * Uses O(n) space to store nodes in a queue to aid in traversal. + */ public void printLevelOrder() { - LinkedList queue = new LinkedList<>(); - queue.add(this); - while (queue.size() > 0) { - Node head = queue.remove(); - System.out.print(head.data + " "); - if (head.left != null) { - queue.add(head.left); - } - if (head.right != null) { - queue.add(head.right); - } - } - } + LinkedList queue = new LinkedList<>(); + queue.add(this); + while (queue.size() > 0) { + Node head = queue.remove(); + System.out.print(head.data + " "); + // Add children of recently-printed node to queue, if they exist. + if (head.left != null) { + queue.add(head.left); + } + if (head.right != null) { + queue.add(head.right); + } + } + } }