From 02bd3c0c9d59a760f766448e0aa6836bba904410 Mon Sep 17 00:00:00 2001 From: xam4lor Date: Thu, 28 Jun 2018 12:09:15 +0200 Subject: [PATCH 01/10] Added java examples for Tree Traversal --- .../code/java/demo_code/MainClass.java | 18 +++ .../code/java/demo_code/Tree.java | 104 ++++++++++++++++++ .../java/individual_examples/treetrav.java | 76 +++++++++++++ 3 files changed, 198 insertions(+) create mode 100644 chapters/tree_traversal/code/java/demo_code/MainClass.java create mode 100644 chapters/tree_traversal/code/java/demo_code/Tree.java create mode 100644 chapters/tree_traversal/code/java/individual_examples/treetrav.java diff --git a/chapters/tree_traversal/code/java/demo_code/MainClass.java b/chapters/tree_traversal/code/java/demo_code/MainClass.java new file mode 100644 index 000000000..94d60c0d8 --- /dev/null +++ b/chapters/tree_traversal/code/java/demo_code/MainClass.java @@ -0,0 +1,18 @@ +//submitted by xam4lor +public class MainClass { + public static void main(String[] args) { + System.out.println("Tree Traversal"); + Tree tree = new Tree(3, 3); + + System.out.println("StartDFSRecursive"); + tree.StartDFSRecursive(); + + System.out.println("DFSStack"); + tree.DFSStack(); + + System.out.println("BFSQueue"); + tree.BFSQueue(); + + System.out.println(""); + } +} diff --git a/chapters/tree_traversal/code/java/demo_code/Tree.java b/chapters/tree_traversal/code/java/demo_code/Tree.java new file mode 100644 index 000000000..dae3c355c --- /dev/null +++ b/chapters/tree_traversal/code/java/demo_code/Tree.java @@ -0,0 +1,104 @@ +// submitted by xam4lor +import java.util.ArrayList; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.Stack; + +public class Tree { + private class Node implements Comparable { + public ArrayList children; + public int id; + + public Node() { + this.children = new ArrayList(); + } + + @Override + public int compareTo(Node other) { + // Need to implement Comparable and override this + // method because of the method BFSQueue() which uses Queues + // and must know how to check if two nodes are the same or not + return Integer.compare(this.id, other.id); + } + } + + + // Global node + private Node root; + + public Tree(int depthCount, int childrenCount) { + this.CreateTree(depthCount, childrenCount); + } + + + + + public void StartDFSRecursive() { + this.DFSRecursive(this.root); + } + + public void DFSStack() { + Stack stack = new Stack(); + stack.push(this.root); + + Node tmp; + + while(stack.size() != 0) { + System.out.println(stack.peek().id); + tmp = stack.pop(); + + for (Node c : tmp.children) { + stack.push(c); + } + } + } + + public void BFSQueue() { + Queue queue = new PriorityQueue(); + queue.add(this.root); + + Node temp; + + while(queue.size() != 0) { + System.out.println(queue.peek().id); + temp = queue.poll(); // return null if the queue is empty + + if(temp != null) { + for (Node c : temp.children) { + queue.add(c); + } + } + } + } + + + + private void CreateTree(int depthCount, int childrenCount) { + this.root = new Node(); + this.root.id = 1; + + this.CreateAllChildren(this.root, depthCount, childrenCount); + } + + private void CreateAllChildren(Node node, int rowCount, int childrenCount) { + if(rowCount <= 1) + return; + + for (int i = 0; i < childrenCount; i++) { + Node tmp = new Node(); + tmp.id = node.id * 10 + i + 1; + + node.children.add(tmp); + + this.CreateAllChildren(node.children.get(i), rowCount - 1, childrenCount); + } + } + + private void DFSRecursive(Node node) { + System.out.println(node.id); + + for (Node c : node.children) { + DFSRecursive(c); + } + } +} diff --git a/chapters/tree_traversal/code/java/individual_examples/treetrav.java b/chapters/tree_traversal/code/java/individual_examples/treetrav.java new file mode 100644 index 000000000..b944c4781 --- /dev/null +++ b/chapters/tree_traversal/code/java/individual_examples/treetrav.java @@ -0,0 +1,76 @@ +public class Node { + public ArrayList children = new ArrayList(); + public int id; +} + + +public void DFSRecursive(Node node) { + // Here we are doing something + System.out.println(node.id); + + for (Node c : node.children) { + DFSRecursive(c); + } +} + + +public void DFSRecursivePostorder(Node node) { + for (Node c : node.children) { + DFSRecursivePostorder(c); + } + + // Here we are doing something... + System.out.println(node.id); +} + + +// This assumes only 2 children +public void DFSRecursiveInorderBinary(Node node) { + if (node.children.size() > 2) { + System.err.println(node.id); + } + + if (node.children.size() > 0) { + DFSRecursiveInorderBinary(node.children.get(0)); + System.out.println(node.id); + DFSRecursiveInorderBinary(node.children.get(1)); + } + else { + System.out.println(node.id); + } +} + + +public void DFSStack(Node node) { + Stack stack = new Stack(); + stack.push(node); + + Node tmp; + + while(stack.size() != 0) { + System.out.println(stack.peek().id); + tmp = stack.pop(); + + for (Node c : tmp.children) { + stack.push(c); + } + } +} + + +public void BFSQueue(Node node) { + Queue queue = new PriorityQueue(); + queue.add(node); + Node temp; + + while(queue.size() != 0) { + System.out.println(queue.peek().id); + temp = queue.poll(); // return null if the queue is empty + + if(temp != null) { + for (Node c : temp.children) { + queue.add(c); + } + } + } +} From 6f0aed8345f8b4aa1fbec826f4eec52d43bebb8e Mon Sep 17 00:00:00 2001 From: xam4lor Date: Thu, 28 Jun 2018 14:31:05 +0200 Subject: [PATCH 02/10] Added java in mk file --- chapters/tree_traversal/tree_traversal.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/chapters/tree_traversal/tree_traversal.md b/chapters/tree_traversal/tree_traversal.md index 42dda492a..d55f637ef 100644 --- a/chapters/tree_traversal/tree_traversal.md +++ b/chapters/tree_traversal/tree_traversal.md @@ -11,6 +11,8 @@ Trees are naturally recursive data structures, and because of this, we cannot ac [import:11-15, lang:"csharp"](code/cs/TreeMdAdditional/TreeMdAdditional.cs) {% sample lang="c" %} [import:7-11, lang:"c_cpp"](code/c/tree_traversal.c) +{% sample lang="java" %} +[import:1-4, lang:"java"](code/java/individual_examples/treetrav.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:3-7, lang:"julia"](code/julia/Tree.jl) @@ -38,6 +40,8 @@ Because of this, the most straightforward way to traverse the tree might be recu [import:48-57, lang:"csharp"](code/cs/TreeMdAdditional/TreeMdAdditional.cs) {% sample lang="c" %} [import:37-45, lang:"c_cpp"](code/c/tree_traversal.c) +{% sample lang="java" %} +[import:7-14, lang:"java"](code/java/individual_examples/treetrav.java) {% sample lang="js" %} [import:15-23, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -75,6 +79,8 @@ This has not been implemented in your chosen language, so here is the Julia code [import:75-84, lang:"csharp"](code/cs/TreeMdAdditional/TreeMdAdditional.cs) {% sample lang="c" %} [import:47-53, lang:"c_cpp"](code/c/tree_traversal.c) +{% sample lang="java" %} +[import:17-24, lang:"java"](code/java/individual_examples/treetrav.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:18-26, lang:"julia"](code/julia/Tree.jl) @@ -110,6 +116,8 @@ This has not been implemented in your chosen language, so here is the Julia code [import:86-104, lang:"csharp"](code/cs/TreeMdAdditional/TreeMdAdditional.cs) {% sample lang="c" %} [import:55-73, lang:"c_cpp"](code/c/tree_traversal.c) +{% sample lang="java" %} +[import:27-41, lang:"java"](code/java/individual_examples/treetrav.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:28-43, lang:"julia"](code/julia/Tree.jl) @@ -154,6 +162,8 @@ In code, it looks like this: [import:36-52, lang:"csharp"](code/cs/Tree/Tree.cs) {% sample lang="c" %} [import:75-93, lang:"c_cpp"](code/c/tree_traversal.c) +{% sample lang="java" %} +[import:44-58, lang:"java"](code/java/individual_examples/treetrav.java) {% sample lang="js" %} [import:25-40, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -187,6 +197,8 @@ And this is exactly what Breadth-First Search (BFS) does! On top of that, it can [import:54-70, lang:"csharp"](code/cs/Tree/Tree.cs) {% sample lang="c" %} [import:95-113, lang:"c_cpp"](code/c/tree_traversal.c) +{% sample lang="java" %} +[import:61-76, lang:"java"](code/java/individual_examples/treetrav.java) {% sample lang="js" %} [import:42-57, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -222,6 +234,12 @@ utility.h [import, lang:"c_cpp"](code/c/utility.h) tree_traversal.c [import, lang:"c_cpp"](code/c/tree_traversal.c) +{% sample lang="java" %} +### Java +Tree.java +[import, lang:"java"](code/java/demo_code/Tree.java) +MainClass.java +[import, lang:"java"](code/java/demo_code/MainClass.java) {% sample lang="js" %} ### JavaScript [import, lang:"javascript"](code/javascript/Tree_example.js) From 3f919c681f53102ff6fe6925c5f919be1f058824 Mon Sep 17 00:00:00 2001 From: xam4lor Date: Thu, 28 Jun 2018 18:26:01 +0200 Subject: [PATCH 03/10] Combined example and explanation code in one file --- .../tree_traversal/code/java/MainClass.java | 18 +++ chapters/tree_traversal/code/java/Tree.java | 122 ++++++++++++++++++ .../code/java/demo_code/MainClass.java | 18 --- .../code/java/demo_code/Tree.java | 104 --------------- .../java/individual_examples/treetrav.java | 76 ----------- 5 files changed, 140 insertions(+), 198 deletions(-) create mode 100644 chapters/tree_traversal/code/java/MainClass.java create mode 100644 chapters/tree_traversal/code/java/Tree.java delete mode 100644 chapters/tree_traversal/code/java/demo_code/MainClass.java delete mode 100644 chapters/tree_traversal/code/java/demo_code/Tree.java delete mode 100644 chapters/tree_traversal/code/java/individual_examples/treetrav.java diff --git a/chapters/tree_traversal/code/java/MainClass.java b/chapters/tree_traversal/code/java/MainClass.java new file mode 100644 index 000000000..f99a85dfb --- /dev/null +++ b/chapters/tree_traversal/code/java/MainClass.java @@ -0,0 +1,18 @@ +//submitted by xam4lor +public class MainClass { + public static void main(String[] args) { + System.out.println("Creating Tree"); + Tree tree = new Tree(2, 3); + + System.out.println("Using recursive DFS :"); + tree.DFSRecursive(tree.root); + + System.out.println("Using stack-based DFS :"); + tree.DFSStack(); + + System.out.println("Using queue-based BFS :"); + tree.BFSQueue(); + + System.out.println(""); + } +} diff --git a/chapters/tree_traversal/code/java/Tree.java b/chapters/tree_traversal/code/java/Tree.java new file mode 100644 index 000000000..25fe1a042 --- /dev/null +++ b/chapters/tree_traversal/code/java/Tree.java @@ -0,0 +1,122 @@ +// submitted by xam4lor +import java.util.ArrayList; +import java.util.PriorityQueue; +import java.util.Queue; +import java.util.Stack; + +public class Tree { + // root node of the Tree + public Node root; + + public Tree(int numberRow, int numberChild) { + root = createTree(numberRow, numberChild); + } + + + + public void DFSRecursive(Node node) { + System.out.println(node.id); + + for (Node n : node.children) { + DFSRecursive(n); + } + } + + public void DFSRecursivePostOrder(Node node) { + for (Node n : node.children) { + DFSRecursivePostOrder(n); + } + + // Here we are doing something ... + System.out.println(node.id); + } + + // This assumes only 2 children + public void DFSRecursiveInOrderBTree(Node node) { + if(node.children.size() > 2) { + System.out.println("Not a binary tree!"); + System.exit(1); + } + + if(node.children.size() > 0) { + DFSRecursiveInOrderBTree(node.children.get(0)); + System.out.println(node.id); + DFSRecursiveInOrderBTree(node.children.get(1)); + } + else { + System.out.println(node.id); + } + } + + public void DFSStack() { + Stack stack = new Stack(); + stack.push(this.root); + + Node tmp; + + while(stack.size() != 0) { + System.out.println(stack.peek().id); + tmp = stack.pop(); + + for (Node c : tmp.children) { + stack.push(c); + } + } + } + + public void BFSQueue() { + Queue queue = new PriorityQueue(); + queue.add(this.root); + + Node temp; + + while(queue.size() != 0) { + System.out.println(queue.peek().id); + temp = queue.poll(); // return null if the queue is empty + + if(temp != null) { + for (Node c : temp.children) { + queue.add(c); + } + } + } + } + + + + + public Node createTree(int numberRow, int numberChild) { + Node ret = new Node(numberRow); + + if(numberRow == 0) { + return ret; + } + + for (int i = 1; i < numberChild; i++) { + Node child = createTree(numberRow - 1, numberChild); + ret.children.add(child); + } + + return ret; + } + + + + private class Node implements Comparable { + public ArrayList children; + public int id; + + public Node(int id) { + this.children = new ArrayList(); + this.id = id; + } + + @Override + public int compareTo(Node other) { + // Need to implement Comparable and override this + // method because of the method BFSQueue() which uses Queues + // and must know how to check if two nodes are the same or not + return Integer.compare(this.id, other.id); + } + } +} diff --git a/chapters/tree_traversal/code/java/demo_code/MainClass.java b/chapters/tree_traversal/code/java/demo_code/MainClass.java deleted file mode 100644 index 94d60c0d8..000000000 --- a/chapters/tree_traversal/code/java/demo_code/MainClass.java +++ /dev/null @@ -1,18 +0,0 @@ -//submitted by xam4lor -public class MainClass { - public static void main(String[] args) { - System.out.println("Tree Traversal"); - Tree tree = new Tree(3, 3); - - System.out.println("StartDFSRecursive"); - tree.StartDFSRecursive(); - - System.out.println("DFSStack"); - tree.DFSStack(); - - System.out.println("BFSQueue"); - tree.BFSQueue(); - - System.out.println(""); - } -} diff --git a/chapters/tree_traversal/code/java/demo_code/Tree.java b/chapters/tree_traversal/code/java/demo_code/Tree.java deleted file mode 100644 index dae3c355c..000000000 --- a/chapters/tree_traversal/code/java/demo_code/Tree.java +++ /dev/null @@ -1,104 +0,0 @@ -// submitted by xam4lor -import java.util.ArrayList; -import java.util.PriorityQueue; -import java.util.Queue; -import java.util.Stack; - -public class Tree { - private class Node implements Comparable { - public ArrayList children; - public int id; - - public Node() { - this.children = new ArrayList(); - } - - @Override - public int compareTo(Node other) { - // Need to implement Comparable and override this - // method because of the method BFSQueue() which uses Queues - // and must know how to check if two nodes are the same or not - return Integer.compare(this.id, other.id); - } - } - - - // Global node - private Node root; - - public Tree(int depthCount, int childrenCount) { - this.CreateTree(depthCount, childrenCount); - } - - - - - public void StartDFSRecursive() { - this.DFSRecursive(this.root); - } - - public void DFSStack() { - Stack stack = new Stack(); - stack.push(this.root); - - Node tmp; - - while(stack.size() != 0) { - System.out.println(stack.peek().id); - tmp = stack.pop(); - - for (Node c : tmp.children) { - stack.push(c); - } - } - } - - public void BFSQueue() { - Queue queue = new PriorityQueue(); - queue.add(this.root); - - Node temp; - - while(queue.size() != 0) { - System.out.println(queue.peek().id); - temp = queue.poll(); // return null if the queue is empty - - if(temp != null) { - for (Node c : temp.children) { - queue.add(c); - } - } - } - } - - - - private void CreateTree(int depthCount, int childrenCount) { - this.root = new Node(); - this.root.id = 1; - - this.CreateAllChildren(this.root, depthCount, childrenCount); - } - - private void CreateAllChildren(Node node, int rowCount, int childrenCount) { - if(rowCount <= 1) - return; - - for (int i = 0; i < childrenCount; i++) { - Node tmp = new Node(); - tmp.id = node.id * 10 + i + 1; - - node.children.add(tmp); - - this.CreateAllChildren(node.children.get(i), rowCount - 1, childrenCount); - } - } - - private void DFSRecursive(Node node) { - System.out.println(node.id); - - for (Node c : node.children) { - DFSRecursive(c); - } - } -} diff --git a/chapters/tree_traversal/code/java/individual_examples/treetrav.java b/chapters/tree_traversal/code/java/individual_examples/treetrav.java deleted file mode 100644 index b944c4781..000000000 --- a/chapters/tree_traversal/code/java/individual_examples/treetrav.java +++ /dev/null @@ -1,76 +0,0 @@ -public class Node { - public ArrayList children = new ArrayList(); - public int id; -} - - -public void DFSRecursive(Node node) { - // Here we are doing something - System.out.println(node.id); - - for (Node c : node.children) { - DFSRecursive(c); - } -} - - -public void DFSRecursivePostorder(Node node) { - for (Node c : node.children) { - DFSRecursivePostorder(c); - } - - // Here we are doing something... - System.out.println(node.id); -} - - -// This assumes only 2 children -public void DFSRecursiveInorderBinary(Node node) { - if (node.children.size() > 2) { - System.err.println(node.id); - } - - if (node.children.size() > 0) { - DFSRecursiveInorderBinary(node.children.get(0)); - System.out.println(node.id); - DFSRecursiveInorderBinary(node.children.get(1)); - } - else { - System.out.println(node.id); - } -} - - -public void DFSStack(Node node) { - Stack stack = new Stack(); - stack.push(node); - - Node tmp; - - while(stack.size() != 0) { - System.out.println(stack.peek().id); - tmp = stack.pop(); - - for (Node c : tmp.children) { - stack.push(c); - } - } -} - - -public void BFSQueue(Node node) { - Queue queue = new PriorityQueue(); - queue.add(node); - Node temp; - - while(queue.size() != 0) { - System.out.println(queue.peek().id); - temp = queue.poll(); // return null if the queue is empty - - if(temp != null) { - for (Node c : temp.children) { - queue.add(c); - } - } - } -} From 971a62fba2d4c4fe588eb456662dee5aeedcb9d7 Mon Sep 17 00:00:00 2001 From: xam4lor Date: Thu, 28 Jun 2018 18:33:17 +0200 Subject: [PATCH 04/10] Updated markdown file --- chapters/tree_traversal/tree_traversal.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/chapters/tree_traversal/tree_traversal.md b/chapters/tree_traversal/tree_traversal.md index d55f637ef..fdb20276d 100644 --- a/chapters/tree_traversal/tree_traversal.md +++ b/chapters/tree_traversal/tree_traversal.md @@ -12,7 +12,7 @@ Trees are naturally recursive data structures, and because of this, we cannot ac {% sample lang="c" %} [import:7-11, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:1-4, lang:"java"](code/java/individual_examples/treetrav.java) +[import:105-121, lang:"java"](code/java/Tree.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:3-7, lang:"julia"](code/julia/Tree.jl) @@ -41,7 +41,7 @@ Because of this, the most straightforward way to traverse the tree might be recu {% sample lang="c" %} [import:37-45, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:7-14, lang:"java"](code/java/individual_examples/treetrav.java) +[import:17-23, lang:"java"](code/java/Tree.java) {% sample lang="js" %} [import:15-23, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -80,7 +80,7 @@ This has not been implemented in your chosen language, so here is the Julia code {% sample lang="c" %} [import:47-53, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:17-24, lang:"java"](code/java/individual_examples/treetrav.java) +[import:25-32, lang:"java"](code/java/Tree.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:18-26, lang:"julia"](code/julia/Tree.jl) @@ -117,7 +117,7 @@ This has not been implemented in your chosen language, so here is the Julia code {% sample lang="c" %} [import:55-73, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:27-41, lang:"java"](code/java/individual_examples/treetrav.java) +[import:34-49, lang:"java"](code/java/Tree.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:28-43, lang:"julia"](code/julia/Tree.jl) @@ -163,7 +163,7 @@ In code, it looks like this: {% sample lang="c" %} [import:75-93, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:44-58, lang:"java"](code/java/individual_examples/treetrav.java) +[import:51-65, lang:"java"](code/java/Tree.java) {% sample lang="js" %} [import:25-40, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -198,7 +198,7 @@ And this is exactly what Breadth-First Search (BFS) does! On top of that, it can {% sample lang="c" %} [import:95-113, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:61-76, lang:"java"](code/java/individual_examples/treetrav.java) +[import:67-83, lang:"java"](code/java/Tree.java) {% sample lang="js" %} [import:42-57, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -237,9 +237,9 @@ tree_traversal.c {% sample lang="java" %} ### Java Tree.java -[import, lang:"java"](code/java/demo_code/Tree.java) +[import, lang:"java"](code/java/Tree.java) MainClass.java -[import, lang:"java"](code/java/demo_code/MainClass.java) +[import, lang:"java"](code/java/MainClass.java) {% sample lang="js" %} ### JavaScript [import, lang:"javascript"](code/javascript/Tree_example.js) From bc174f29d4627b1ea78191a6ccddb8516d00cfff Mon Sep 17 00:00:00 2001 From: xam4lor Date: Fri, 29 Jun 2018 16:05:21 +0200 Subject: [PATCH 05/10] Added method overloading --- .../tree_traversal/code/java/MainClass.java | 35 ++-- chapters/tree_traversal/code/java/Tree.java | 180 ++++++++++-------- 2 files changed, 121 insertions(+), 94 deletions(-) diff --git a/chapters/tree_traversal/code/java/MainClass.java b/chapters/tree_traversal/code/java/MainClass.java index f99a85dfb..abbb10ad5 100644 --- a/chapters/tree_traversal/code/java/MainClass.java +++ b/chapters/tree_traversal/code/java/MainClass.java @@ -1,18 +1,31 @@ //submitted by xam4lor public class MainClass { - public static void main(String[] args) { - System.out.println("Creating Tree"); - Tree tree = new Tree(2, 3); + public static void main(String[] args) { + System.out.println("Creating Tree"); + Tree tree = new Tree(3, 3); - System.out.println("Using recursive DFS :"); - tree.DFSRecursive(tree.root); + System.out.println("Using recursive DFS :"); + tree.dfsRecursive(); - System.out.println("Using stack-based DFS :"); - tree.DFSStack(); + System.out.println("Using stack-based DFS :"); + tree.dfsStack(); - System.out.println("Using queue-based BFS :"); - tree.BFSQueue(); + System.out.println("Using queue-based BFS :"); + tree.bfsQueue(); - System.out.println(""); - } + System.out.println("Using post-order recursive DFS :"); + tree.dfsRecursivePostOrder(); + + + // Uncommenting the following 2 lines will result in an exception thrown because at least one Node of the Tree has more than 2 children and therefor a DFSRecursiveInorderBinary doesn't work. + System.out.println("Using in-order binary recursive DFS : (fail)"); + tree.dfsRecursiveInOrderBinary(); + + tree = new Tree(3, 2); + System.out.println("Using in-order binary recursive DFS : (suceed)"); + tree.dfsRecursiveInOrderBinary(); + + + System.out.println(""); + } } diff --git a/chapters/tree_traversal/code/java/Tree.java b/chapters/tree_traversal/code/java/Tree.java index 25fe1a042..ae74f61d4 100644 --- a/chapters/tree_traversal/code/java/Tree.java +++ b/chapters/tree_traversal/code/java/Tree.java @@ -5,118 +5,132 @@ import java.util.Stack; public class Tree { - // root node of the Tree public Node root; - public Tree(int numberRow, int numberChild) { - root = createTree(numberRow, numberChild); + public Tree(int rowCount, int childrenCount) { + // this.root is the root node of the Tree + this.root = new Node(1); + this.createAllChildren(this.root, rowCount, childrenCount); } - public void DFSRecursive(Node node) { - System.out.println(node.id); + public void dfsRecursive() { + this.dfsRecursive(this.root); + } + + private void dfsRecursive(Node node) { + System.out.println(node.id); + + for (Node n : node.children) { + dfsRecursive(n); + } + } + + + + public void dfsRecursivePostOrder() { + this.dfsRecursivePostOrder(this.root); + } - for (Node n : node.children) { - DFSRecursive(n); - } - } + private void dfsRecursivePostOrder(Node node) { + for (Node n : node.children) { + dfsRecursivePostOrder(n); + } + + // Here we are doing something ... + System.out.println(node.id); + } - public void DFSRecursivePostOrder(Node node) { - for (Node n : node.children) { - DFSRecursivePostOrder(n); - } - // Here we are doing something ... - System.out.println(node.id); - } - // This assumes only 2 children - public void DFSRecursiveInOrderBTree(Node node) { - if(node.children.size() > 2) { - System.out.println("Not a binary tree!"); - System.exit(1); - } + public void dfsRecursiveInOrderBinary() { + dfsRecursiveInOrderBinary(this.root); + } - if(node.children.size() > 0) { - DFSRecursiveInOrderBTree(node.children.get(0)); - System.out.println(node.id); - DFSRecursiveInOrderBTree(node.children.get(1)); - } - else { - System.out.println(node.id); - } - } + // This assumes only 2 children + private void dfsRecursiveInOrderBinary(Node node) { + if(node.children.size() > 2) { + System.err.println("Not a binary tree at dfsRecursiveInOrderBinary()!"); + return; + } + + if(node.children.size() > 1) { + dfsRecursiveInOrderBinary(node.children.get(0)); + System.out.println(node.id); + dfsRecursiveInOrderBinary(node.children.get(1)); + } + else { + System.out.println(node.id); + } + } - public void DFSStack() { - Stack stack = new Stack(); - stack.push(this.root); - Node tmp; - while(stack.size() != 0) { - System.out.println(stack.peek().id); - tmp = stack.pop(); + public void dfsStack() { + Stack stack = new Stack(); + stack.push(this.root); - for (Node c : tmp.children) { - stack.push(c); - } - } - } + Node tmp; - public void BFSQueue() { - Queue queue = new PriorityQueue(); - queue.add(this.root); + while(stack.size() != 0) { + System.out.println(stack.peek().id); + tmp = stack.pop(); - Node temp; + for (Node c : tmp.children) { + stack.push(c); + } + } + } - while(queue.size() != 0) { - System.out.println(queue.peek().id); - temp = queue.poll(); // return null if the queue is empty + public void bfsQueue() { + Queue queue = new PriorityQueue(); + queue.add(this.root); - if(temp != null) { - for (Node c : temp.children) { - queue.add(c); - } - } - } - } + Node temp; + while(queue.size() != 0) { + System.out.println(queue.peek().id); + temp = queue.poll(); // return null if the queue is empty + if(temp != null) { + for (Node c : temp.children) { + queue.add(c); + } + } + } + } - public Node createTree(int numberRow, int numberChild) { - Node ret = new Node(numberRow); - if(numberRow == 0) { - return ret; - } - for (int i = 1; i < numberChild; i++) { - Node child = createTree(numberRow - 1, numberChild); - ret.children.add(child); - } + private void createAllChildren(Node node, int rowCount, int childrenCount) { + if(rowCount <= 1) + return; - return ret; - } + for (int i = 0; i < childrenCount; i++) { + node.children.add(new Node(node.id * 10 + i + 1)); + createAllChildren(node.children.get(i), rowCount - 1, childrenCount); + } + } - private class Node implements Comparable { - public ArrayList children; - public int id; + private class Node implements Comparable { + public ArrayList children; + public int id; - public Node(int id) { - this.children = new ArrayList(); - this.id = id; - } + public Node(int id) { + this.children = new ArrayList(); + this.id = id; + } - @Override - public int compareTo(Node other) { - // Need to implement Comparable and override this - // method because of the method BFSQueue() which uses Queues - // and must know how to check if two nodes are the same or not - return Integer.compare(this.id, other.id); - } - } + @Override + public int compareTo(Node other) { + // Need to implement Comparable and override this + // method because of the method BFSQueue() which uses Queues + // and must know how to check if two nodes are the same or not + return Integer.compare(this.id, other.id); + } + } } From ff1c8de08c5fd0a3856b58fe3ffb419057566a88 Mon Sep 17 00:00:00 2001 From: xam4lor Date: Fri, 29 Jun 2018 21:15:27 +0200 Subject: [PATCH 06/10] Removed useless spaces --- chapters/tree_traversal/code/java/Tree.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/chapters/tree_traversal/code/java/Tree.java b/chapters/tree_traversal/code/java/Tree.java index ae74f61d4..89cea60a8 100644 --- a/chapters/tree_traversal/code/java/Tree.java +++ b/chapters/tree_traversal/code/java/Tree.java @@ -14,7 +14,6 @@ public Tree(int rowCount, int childrenCount) { } - public void dfsRecursive() { this.dfsRecursive(this.root); } @@ -28,7 +27,6 @@ private void dfsRecursive(Node node) { } - public void dfsRecursivePostOrder() { this.dfsRecursivePostOrder(this.root); } @@ -43,7 +41,6 @@ private void dfsRecursivePostOrder(Node node) { } - public void dfsRecursiveInOrderBinary() { dfsRecursiveInOrderBinary(this.root); } @@ -66,7 +63,6 @@ private void dfsRecursiveInOrderBinary(Node node) { } - public void dfsStack() { Stack stack = new Stack(); stack.push(this.root); @@ -102,8 +98,6 @@ public void bfsQueue() { } - - private void createAllChildren(Node node, int rowCount, int childrenCount) { if(rowCount <= 1) return; @@ -115,7 +109,6 @@ private void createAllChildren(Node node, int rowCount, int childrenCount) { } - private class Node implements Comparable { public ArrayList children; public int id; From c3aba0faea1a0c126349a20b002cfb430dd5e604 Mon Sep 17 00:00:00 2001 From: xam4lor Date: Fri, 29 Jun 2018 21:36:06 +0200 Subject: [PATCH 07/10] Updated Markdown file --- chapters/tree_traversal/tree_traversal.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/chapters/tree_traversal/tree_traversal.md b/chapters/tree_traversal/tree_traversal.md index fdb20276d..842b278c2 100644 --- a/chapters/tree_traversal/tree_traversal.md +++ b/chapters/tree_traversal/tree_traversal.md @@ -12,7 +12,7 @@ Trees are naturally recursive data structures, and because of this, we cannot ac {% sample lang="c" %} [import:7-11, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:105-121, lang:"java"](code/java/Tree.java) +[import:112-128, lang:"java"](code/java/Tree.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:3-7, lang:"julia"](code/julia/Tree.jl) @@ -41,7 +41,7 @@ Because of this, the most straightforward way to traverse the tree might be recu {% sample lang="c" %} [import:37-45, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:17-23, lang:"java"](code/java/Tree.java) +[import:21-27, lang:"java"](code/java/Tree.java) {% sample lang="js" %} [import:15-23, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -80,7 +80,7 @@ This has not been implemented in your chosen language, so here is the Julia code {% sample lang="c" %} [import:47-53, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:25-32, lang:"java"](code/java/Tree.java) +[import:34-41, lang:"java"](code/java/Tree.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:18-26, lang:"julia"](code/julia/Tree.jl) @@ -117,7 +117,7 @@ This has not been implemented in your chosen language, so here is the Julia code {% sample lang="c" %} [import:55-73, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:34-49, lang:"java"](code/java/Tree.java) +[import:48-63, lang:"java"](code/java/Tree.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:28-43, lang:"julia"](code/julia/Tree.jl) @@ -163,7 +163,7 @@ In code, it looks like this: {% sample lang="c" %} [import:75-93, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:51-65, lang:"java"](code/java/Tree.java) +[import:66-80, lang:"java"](code/java/Tree.java) {% sample lang="js" %} [import:25-40, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -198,7 +198,7 @@ And this is exactly what Breadth-First Search (BFS) does! On top of that, it can {% sample lang="c" %} [import:95-113, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:67-83, lang:"java"](code/java/Tree.java) +[import:82-98, lang:"java"](code/java/Tree.java) {% sample lang="js" %} [import:42-57, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} From f6772a678507767f96bba6ac423805f12b43fc2a Mon Sep 17 00:00:00 2001 From: xam4lor Date: Fri, 29 Jun 2018 21:49:40 +0200 Subject: [PATCH 08/10] Updated code for coding conventions --- chapters/tree_traversal/code/java/Tree.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/chapters/tree_traversal/code/java/Tree.java b/chapters/tree_traversal/code/java/Tree.java index 89cea60a8..5b37431d7 100644 --- a/chapters/tree_traversal/code/java/Tree.java +++ b/chapters/tree_traversal/code/java/Tree.java @@ -47,17 +47,16 @@ public void dfsRecursiveInOrderBinary() { // This assumes only 2 children private void dfsRecursiveInOrderBinary(Node node) { - if(node.children.size() > 2) { + if (node.children.size() > 2) { System.err.println("Not a binary tree at dfsRecursiveInOrderBinary()!"); return; } - if(node.children.size() > 1) { + if (node.children.size() > 1) { dfsRecursiveInOrderBinary(node.children.get(0)); System.out.println(node.id); dfsRecursiveInOrderBinary(node.children.get(1)); - } - else { + } else { System.out.println(node.id); } } @@ -69,7 +68,7 @@ public void dfsStack() { Node tmp; - while(stack.size() != 0) { + while (stack.size() != 0) { System.out.println(stack.peek().id); tmp = stack.pop(); @@ -85,11 +84,11 @@ public void bfsQueue() { Node temp; - while(queue.size() != 0) { + while (queue.size() != 0) { System.out.println(queue.peek().id); temp = queue.poll(); // return null if the queue is empty - if(temp != null) { + if (temp != null) { for (Node c : temp.children) { queue.add(c); } @@ -99,8 +98,9 @@ public void bfsQueue() { private void createAllChildren(Node node, int rowCount, int childrenCount) { - if(rowCount <= 1) - return; + if (rowCount <= 1) { + return; + } for (int i = 0; i < childrenCount; i++) { node.children.add(new Node(node.id * 10 + i + 1)); From 8467c5ff7b30a552792a0112699016ab40df13e7 Mon Sep 17 00:00:00 2001 From: xam4lor Date: Fri, 29 Jun 2018 22:07:51 +0200 Subject: [PATCH 09/10] Moved temp variable in bfsQueue() --- chapters/tree_traversal/code/java/Tree.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/chapters/tree_traversal/code/java/Tree.java b/chapters/tree_traversal/code/java/Tree.java index 5b37431d7..595df47b0 100644 --- a/chapters/tree_traversal/code/java/Tree.java +++ b/chapters/tree_traversal/code/java/Tree.java @@ -82,11 +82,9 @@ public void bfsQueue() { Queue queue = new PriorityQueue(); queue.add(this.root); - Node temp; - while (queue.size() != 0) { System.out.println(queue.peek().id); - temp = queue.poll(); // return null if the queue is empty + Node temp = queue.poll(); // return null if the queue is empty if (temp != null) { for (Node c : temp.children) { From 374ee27bcdf505a3e25b185ab10b17779b4f771b Mon Sep 17 00:00:00 2001 From: xam4lor Date: Fri, 29 Jun 2018 22:10:00 +0200 Subject: [PATCH 10/10] Update tree_traversal.md --- chapters/tree_traversal/tree_traversal.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/chapters/tree_traversal/tree_traversal.md b/chapters/tree_traversal/tree_traversal.md index 842b278c2..8ffd6cd60 100644 --- a/chapters/tree_traversal/tree_traversal.md +++ b/chapters/tree_traversal/tree_traversal.md @@ -12,7 +12,7 @@ Trees are naturally recursive data structures, and because of this, we cannot ac {% sample lang="c" %} [import:7-11, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:112-128, lang:"java"](code/java/Tree.java) +[import:110-126, lang:"java"](code/java/Tree.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:3-7, lang:"julia"](code/julia/Tree.jl) @@ -117,7 +117,7 @@ This has not been implemented in your chosen language, so here is the Julia code {% sample lang="c" %} [import:55-73, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:48-63, lang:"java"](code/java/Tree.java) +[import:48-62, lang:"java"](code/java/Tree.java) {% sample lang="js" %} This has not been implemented in your chosen language, so here is the Julia code [import:28-43, lang:"julia"](code/julia/Tree.jl) @@ -163,7 +163,7 @@ In code, it looks like this: {% sample lang="c" %} [import:75-93, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:66-80, lang:"java"](code/java/Tree.java) +[import:65-79, lang:"java"](code/java/Tree.java) {% sample lang="js" %} [import:25-40, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %} @@ -198,7 +198,7 @@ And this is exactly what Breadth-First Search (BFS) does! On top of that, it can {% sample lang="c" %} [import:95-113, lang:"c_cpp"](code/c/tree_traversal.c) {% sample lang="java" %} -[import:82-98, lang:"java"](code/java/Tree.java) +[import:81-95, lang:"java"](code/java/Tree.java) {% sample lang="js" %} [import:42-57, lang:"javascript"](code/javascript/Tree_example.js) {% sample lang="py2" %}