From b1d4be7f86d81e4aa7b52f6e9301cb56883b6ba2 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Thu, 9 May 2019 20:20:44 +0800 Subject: [PATCH] docs: update AnyBaseToAnyBase and GenericTree --- Conversions/AnyBaseToAnyBase.java | 9 +- DataStructures/Trees/GenericTree.Java | 395 +++++++++++++------------- Sorts/BinaryTreeSort.java | 92 ------ 3 files changed, 205 insertions(+), 291 deletions(-) delete mode 100644 Sorts/BinaryTreeSort.java diff --git a/Conversions/AnyBaseToAnyBase.java b/Conversions/AnyBaseToAnyBase.java index 9436fbfa..cfcf0fe9 100644 --- a/Conversions/AnyBaseToAnyBase.java +++ b/Conversions/AnyBaseToAnyBase.java @@ -15,15 +15,16 @@ import java.util.Scanner; */ public class AnyBaseToAnyBase { - // Smallest and largest base you want to accept as valid input + /** + * Smallest and largest base you want to accept as valid input + */ static final int MINIMUM_BASE = 2; static final int MAXIMUM_BASE = 36; - // Driver public static void main(String[] args) { Scanner in = new Scanner(System.in); String n; - int b1 = 0, b2 = 0; + int b1, b2; while (true) { try { System.out.print("Enter number: "); @@ -64,7 +65,7 @@ public class AnyBaseToAnyBase { char[] digitsForBase = Arrays.copyOfRange(validDigits, 0, base); // Convert character array into set for convenience of contains() method - HashSet digitsList = new HashSet(); + HashSet digitsList = new HashSet<>(); for (int i = 0; i < digitsForBase.length; i++) digitsList.add(digitsForBase[i]); diff --git a/DataStructures/Trees/GenericTree.Java b/DataStructures/Trees/GenericTree.Java index 122c8933..bb3d29dc 100644 --- a/DataStructures/Trees/GenericTree.Java +++ b/DataStructures/Trees/GenericTree.Java @@ -4,226 +4,231 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.Scanner; +/** + * A generic tree is a tree which can have as many children as it can be + * It might be possible that every node present is directly connected to + * root node. + *

+ * In this code + * Every function has two copies: one function is helper function which can be called from + * main and from that function a private function is called which will do the actual work. + * I have done this, while calling from main one have to give minimum parameters. + */ public class GenericTree { - private class Node { - int data; - ArrayList child = new ArrayList<>(); - } + private class Node { + int data; + ArrayList child = new ArrayList<>(); + } - private Node root; - private int size; + private Node root; + private int size; - /* - A generic tree is a tree which can have as many children as it can be - It might be possible that every node present is directly connected to - root node. + public GenericTree() { //Constructor + Scanner scn = new Scanner(System.in); + root = create_treeG(null, 0, scn); + } - In this code - Every function has two copies: one function is helper function which can be called from - main and from that function a private function is called which will do the actual work. - I have done this, while calling from main one have to give minimum parameters. + private Node create_treeG(Node node, int childindx, Scanner scn) { + // display + if (node == null) { + System.out.println("Enter root's data"); + } else { + System.out.println("Enter data of parent of index " + node.data + " " + childindx); + } + // input + node = new Node(); + node.data = scn.nextInt(); + System.out.println("number of children"); + int number = scn.nextInt(); + for (int i = 0; i < number; i++) { + Node child = create_treeG(node, i, scn); + size++; + node.child.add(child); + } + return node; + } - */ - public GenericTree() { //Constructor - Scanner scn = new Scanner(System.in); - root = create_treeG(null, 0, scn); - } + /** + * Function to display the generic tree + */ + public void display() { //Helper function + display_1(root); + } - private Node create_treeG(Node node, int childindx, Scanner scn) { - // display - if (node == null) { - System.out.println("Enter root's data"); - } else { - System.out.println("Enter data of parent of index " + node.data + " " + childindx); - } - // input - node = new Node(); - node.data = scn.nextInt(); - System.out.println("number of children"); - int number = scn.nextInt(); - for (int i = 0; i < number; i++) { - Node childd = create_treeG(node, i, scn); - size++; - node.child.add(childd); - } - return node; - } + private void display_1(Node parent) { + System.out.print(parent.data + "=>"); + for (int i = 0; i < parent.child.size(); i++) { + System.out.print(parent.child.get(i).data + " "); + } + System.out.println("."); + for (int i = 0; i < parent.child.size(); i++) { + display_1(parent.child.get(i)); + } + } - /* - Function to display the generic tree - */ - public void display() { //Helper function - display_1(root); - return; - } + /** + * One call store the size directly but if you are asked compute size this function to calculate + * size goes as follows + * + * @return size + */ + public int size2call() { + return size2(root); + } - private void display_1(Node parent) { - System.out.print(parent.data + "=>"); - for (int i = 0; i < parent.child.size(); i++) { - System.out.print(parent.child.get(i).data + " "); - } - System.out.println("."); - for (int i = 0; i < parent.child.size(); i++) { - display_1(parent.child.get(i)); - } - return; - } + public int size2(Node roott) { + int sz = 0; + for (int i = 0; i < roott.child.size(); i++) { + sz += size2(roott.child.get(i)); + } + return sz + 1; + } - /* - One call store the size directly but if you are asked compute size this function to calcuate - size goes as follows - */ + /** + * Function to compute maximum value in the generic tree + * + * @return maximum value + */ + public int maxcall() { + int maxi = root.data; + return max(root, maxi); + } - public int size2call() { - return size2(root); - } + private int max(Node roott, int maxi) { + if (maxi < roott.data) + maxi = roott.data; + for (int i = 0; i < roott.child.size(); i++) { + maxi = max(roott.child.get(i), maxi); + } - public int size2(Node roott) { - int sz = 0; - for (int i = 0; i < roott.child.size(); i++) { - sz += size2(roott.child.get(i)); - } - return sz + 1; - } + return maxi; + } - /* - Function to compute maximum value in the generic tree - */ - public int maxcall() { - int maxi = root.data; - return max(root, maxi); - } + /** + * Function to compute HEIGHT of the generic tree + * + * @return height + */ + public int heightcall() { + return height(root) - 1; + } - private int max(Node roott, int maxi) { - if (maxi < roott.data) - maxi = roott.data; - for (int i = 0; i < roott.child.size(); i++) { - maxi = max(roott.child.get(i), maxi); - } + private int height(Node node) { + int h = 0; + for (int i = 0; i < node.child.size(); i++) { + int k = height(node.child.get(i)); + if (k > h) + h = k; + } + return h + 1; + } - return maxi; - } + /** + * Function to find whether a number is present in the generic tree or not + * + * @param info number + * @return present or not + */ + public boolean findcall(int info) { + return find(root, info); + } - /* - Function to compute HEIGHT of the generic tree - */ + private boolean find(Node node, int info) { + if (node.data == info) + return true; + for (int i = 0; i < node.child.size(); i++) { + if (find(node.child.get(i), info)) + return true; + } + return false; + } - public int heightcall() { - return height(root) - 1; - } - private int height(Node node) { - int h = 0; - for (int i = 0; i < node.child.size(); i++) { - int k = height(node.child.get(i)); - if (k > h) - h = k; - } - return h + 1; - } + /** + * Function to calculate depth of generic tree + * + * @param dep depth + */ + public void depthcaller(int dep) { + depth(root, dep); + } - /* - Function to find whether a number is present in the generic tree or not - */ + public void depth(Node node, int dep) { + if (dep == 0) { + System.out.println(node.data); + return; + } + for (int i = 0; i < node.child.size(); i++) + depth(node.child.get(i), dep - 1); + return; + } - public boolean findcall(int info) { - return find(root, info); - } + /** + * Function to print generic tree in pre-order + */ + public void preordercall() { + preorder(root); + System.out.println("."); + } - private boolean find(Node node, int info) { - if (node.data == info) - return true; - for (int i = 0; i < node.child.size(); i++) { - if (find(node.child.get(i), info)) - return true; - } - return false; - } + private void preorder(Node node) { + System.out.print(node.data + " "); + for (int i = 0; i < node.child.size(); i++) + preorder(node.child.get(i)); + } - /* - Function to calculate depth of generic tree - */ - public void depthcaller(int dep) { - depth(root, dep); - } + /** + * Function to print generic tree in post-order + */ + public void postordercall() { + postorder(root); + System.out.println("."); + } - public void depth(Node node, int dep) { - if (dep == 0) { - System.out.println(node.data); - return; - } - for (int i = 0; i < node.child.size(); i++) - depth(node.child.get(i), dep - 1); - return; - } + private void postorder(Node node) { + for (int i = 0; i < node.child.size(); i++) + postorder(node.child.get(i)); + System.out.print(node.data + " "); + } - /* - Function to print generic tree in pre-order - */ - public void preordercall() { - preorder(root); - System.out.println("."); - } + /** + * Function to print generic tree in level-order + */ + public void levelorder() { + LinkedList q = new LinkedList<>(); + q.addLast(root); + while (!q.isEmpty()) { + int k = q.getFirst().data; + System.out.print(k + " "); - private void preorder(Node node) { - System.out.print(node.data + " "); - for (int i = 0; i < node.child.size(); i++) - preorder(node.child.get(i)); - } + for (int i = 0; i < q.getFirst().child.size(); i++) { + q.addLast(q.getFirst().child.get(i)); + } + q.removeFirst(); + } + System.out.println("."); + } - /* - Function to print generic tree in post-order - */ - public void postordercall() { - postorder(root); - System.out.println("."); - } + /** + * Function to remove all leaves of generic tree + */ + public void removeleavescall() { + removeleaves(root); + } - private void postorder(Node node) { - for (int i = 0; i < node.child.size(); i++) - postorder(node.child.get(i)); - System.out.print(node.data + " "); - } - - /* - Function to print generic tree in level-order - */ - - public void levelorder() { - LinkedList q = new LinkedList<>(); - q.addLast(root); - while (!q.isEmpty()) { - int k = q.getFirst().data; - System.out.print(k + " "); - - for (int i = 0; i < q.getFirst().child.size(); i++) { - q.addLast(q.getFirst().child.get(i)); - } - q.removeFirst(); - } - System.out.println("."); - } - - /* - Function to remove all leaves of generic tree - */ - public void removeleavescall() { - removeleaves(root); - } - - private void removeleaves(Node node) { - ArrayList arr = new ArrayList<>(); - for (int i = 0; i < node.child.size(); i++) { - if (node.child.get(i).child.size() == 0) { - arr.add(i); - // node.child.remove(i); - // i--; - } else - removeleaves(node.child.get(i)); - } - for (int i = arr.size() - 1; i >= 0; i--) { - node.child.remove(arr.get(i) + 0); - } - } + private void removeleaves(Node node) { + ArrayList arr = new ArrayList<>(); + for (int i = 0; i < node.child.size(); i++) { + if (node.child.get(i).child.size() == 0) { + arr.add(i); + // node.child.remove(i); + // i--; + } else + removeleaves(node.child.get(i)); + } + for (int i = arr.size() - 1; i >= 0; i--) { + node.child.remove(arr.get(i) + 0); + } + } } \ No newline at end of file diff --git a/Sorts/BinaryTreeSort.java b/Sorts/BinaryTreeSort.java deleted file mode 100644 index b4403b6e..00000000 --- a/Sorts/BinaryTreeSort.java +++ /dev/null @@ -1,92 +0,0 @@ -package Sorts; - -import static Sorts.SortUtils.less; -import static Sorts.SortUtils.print; - -/** - * @author Podshivalov Nikita (https://github.com/nikitap492) - * @see SortAlgorithm - */ -public class BinaryTreeSort implements SortAlgorithm { - - interface TreeVisitor> { - void visit(Node node); - } - - private static class SortVisitor> implements TreeVisitor { - - private final T[] array; - private int counter; - - SortVisitor(T[] array) { - this.array = array; - } - - @Override - public void visit(Node node) { - array[counter++] = node.value; - } - } - - private static class Node> { - private T value; - private Node left; - private Node right; - - Node(T value) { - this.value = value; - } - - void insert(Node node) { - if (less(node.value, value)) { - if (left != null) left.insert(node); - else left = node; - } else { - if (right != null) right.insert(node); - else right = node; - } - } - - void traverse(TreeVisitor visitor) { - if (left != null) - left.traverse(visitor); - - visitor.visit(this); - - if (right != null) - right.traverse(visitor); - } - - } - - - @Override - public > T[] sort(T[] array) { - - Node root = new Node<>(array[0]); - for (int i = 1; i < array.length; i++) { - root.insert(new Node<>(array[i])); - } - - root.traverse(new SortVisitor<>(array)); - - return array; - } - - - public static void main(String args[]) { - - Integer[] intArray = {12, 40, 9, 3, 19, 74, 7, 31, 23, 54, 26, 81, 12}; - BinaryTreeSort treeSort = new BinaryTreeSort(); - Integer[] sorted = treeSort.sort(intArray); - print(sorted); - - Double[] decimalArray = {8.2, 1.5, 3.14159265, 9.3, 5.1, 4.8, 2.6}; - print(treeSort.sort(decimalArray)); - - String[] stringArray = {"c", "a", "e", "b", "d", "dd", "da", "zz", "AA", "aa", "aB", "Hb", "Z"}; - print(treeSort.sort(stringArray)); - } - -} -