java


Binary Search tree , implementing new methods ! [java]


i have an assignment that want me to make implementation for Binary Search and its methods and make a new methods for it .. well , i did it but the i didn't know how to make the last 2 tasks :
4. Once the user is done with insertion/deletion, your program should calculate the balance factor for each node.
5. Finally, your program should print the balance factor for each node. If a node is not well-balanced (its balance factor is not 0, 1, or -1), you have to state its imbalanced state (whether it is LL, LR, RR, or RL).
here's my code :
package BST;
import java.util.Scanner;
public class BST<E extends Comparable<E>> {
protected TreeNode<E> root;
protected int size = 0;
/** Create a default binary tree */
public BST() {
}
/** Create a binary tree from an array of objects */
public BST(E[] objects) {
for (int i = 0; i < objects.length; i++)
insert(objects[i]);
}
/** Returns true if the element is in the tree */
public boolean search(E e) {
TreeNode<E> current = root; // Start from the root
while (current != null) {
if (e.compareTo(current.element) < 0) {
current = current.left;
}
else if (e.compareTo(current.element) > 0) {
current = current.right;
}
else // element matches current.element
return true; // Element is found
}
return false;
}
/** Insert element o into the binary tree
* Return true if the element is inserted successfully */
public boolean insert(E e) {
if (root == null)
root = createNewNode(e); // Create a new root
else {
// Locate the parent node
TreeNode<E> parent = null;
TreeNode<E> current = root;
while (current != null)
if (e.compareTo(current.element) < 0) {
parent = current;
current = current.left;
}
else if (e.compareTo(current.element) > 0) {
parent = current;
current = current.right;
}
else
return false; // Duplicate node not inserted
// Create the new node and attach it to the parent node
if (e.compareTo(parent.element) < 0)
parent.left = createNewNode(e);
else
parent.right = createNewNode(e);
}
size++;
return true; // Element inserted
}
protected TreeNode<E> createNewNode(E e) {
return new TreeNode<E>(e);
}
public void inorder() {
inorder(root);
}
protected void inorder(TreeNode<E> root) {
if (root == null) return;
inorder(root.left);
System.out.print(root.element + " ");
inorder(root.right);
}
public void postorder() {
postorder(root);
}
protected void postorder(TreeNode<E> root) {
if (root == null) return;
postorder(root.left);
postorder(root.right);
System.out.print(root.element + " ");
}
/** Preorder traversal from the root */
public void preorder() {
preorder(root);
}
/** Preorder traversal from a subtree */
protected void preorder(TreeNode<E> root) {
if (root == null) return;
System.out.print(root.element + " ");
preorder(root.left);
preorder(root.right);
}
/** This inner class is static, because it does not access
any instance members defined in its outer class */
public static class TreeNode<E extends Comparable<E>> {
protected E element;
protected TreeNode<E> left;
protected TreeNode<E> right;
public TreeNode(E e) {
element = e;
}
}
/** Get the number of nodes in the tree */
public int getSize() {
return size;
}
/** Returns the root of the tree */
public TreeNode<E> getRoot() {
return root;
}
/** Returns a path from the root leading to the specified element */
public java.util.ArrayList<TreeNode<E>> path(E e) {
java.util.ArrayList<TreeNode<E>> list =
new java.util.ArrayList<TreeNode<E>>();
TreeNode<E> current = root; // Start from the root
while (current != null) {
list.add(current); // Add the node to the list
if (e.compareTo(current.element) < 0) {
current = current.left;
}
else if (e.compareTo(current.element) > 0) {
current = current.right;
}
else
break;
}
return list; // Return an array of nodes
}
/** Delete an element from the binary tree.
* Return true if the element is deleted successfully
* Return false if the element is not in the tree */
public boolean delete(E e) {
// Locate the node to be deleted and also locate its parent node
TreeNode<E> parent = null;
TreeNode<E> current = root;
while (current != null) {
if (e.compareTo(current.element) < 0) {
parent = current;
current = current.left;
}
else if (e.compareTo(current.element) > 0) {
parent = current;
current = current.right;
}
else
break; // Element is in the tree pointed at by current
}
if (current == null)
return false; // Element is not in the tree
// Case 1: current has no left children
if (current.left == null) {
// Connect the parent with the right child of the current node
if (parent == null) {
root = current.right;
}
else {
if (e.compareTo(parent.element) < 0)
parent.left = current.right;
else
parent.right = current.right;
}
}
else {
// Case 2: The current node has a left child
// Locate the rightmost node in the left subtree of
// the current node and also its parent
TreeNode<E> parentOfRightMost = current;
TreeNode<E> rightMost = current.left;
while (rightMost.right != null) {
parentOfRightMost = rightMost;
rightMost = rightMost.right; // Keep going to the right
}
// Replace the element in current by the element in rightMost
current.element = rightMost.element;
// Eliminate rightmost node
if (parentOfRightMost.right == rightMost)
parentOfRightMost.right = rightMost.left;
else
// Special case: parentOfRightMost == current
parentOfRightMost.left = rightMost.left;
}
size--;
return true; // Element inserted
}
public java.util.Iterator<E> iterator() {
return new InorderIterator();
}
// Inner class InorderIterator
private class InorderIterator implements java.util.Iterator<E> {
// Store the elements in a list
private java.util.ArrayList<E> list =
new java.util.ArrayList<E>();
private int current = 0; // Point to the current element in list
public InorderIterator() {
inorder(); // Traverse binary tree and store elements in list
}
private void inorder() {
inorder(root);
}
private void inorder(TreeNode<E> root) {
if (root == null)return;
inorder(root.left);
list.add(root.element);
inorder(root.right);
}
/** More elements for traversing? */
public boolean hasNext() {
if (current < list.size())
return true;
return false;
}
public E next() {
return list.get(current++);
}
public void remove() {
delete(list.get(current)); // Delete the current element
list.clear(); // Clear the list
inorder(); // Rebuild the list
}
}
public void clear() {
root = null;
size = 0;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
BST<Integer> a = new BST<>();
int num = 0;
System.out.println("How many nummbers do you want to insert ? ");
num = in.nextInt();
for (int i = 0; i <= num; i++) {
a.insert(in.nextInt());
}
}
}

Related Links

Query dataframe using spark-sql from remote client
How to set a maximum integer limit to three so that after pushing a number button for the fourth time, the displayed number wouldn't change?
How to correctly display composed Unicode text in Java on Mac OS X
Entity cannot be resolved to a type
Use Liquibase on SQL introspection generated Hibernate classes
JPanel components won't display
When to implicitly cast an object [duplicate]
How to copy object contents not object references using Reflection?
What is the best way to deal with #OneToOne general type
How to use variable names as column names and table names inside prepared statement while using oracle database
Hibernate, Spring, PostgreSQL - column index is out of range
How to search after embedded entity's value in spring repository?
How to get text same level tags with selenium?
Required String parameter is not present Spring MVC
Allow solr 4.10.3 to listen two interfaces only in solrcloud
Accelerator commands not working when focus lost

Categories

HOME
gitlab
testng
c#-4.0
pycharm
json.net
homebrew
fft
office365api
react-router
bookshelf.js
at-command
yarn
gps
win32gui
swagger-ui
ios-charts
contact
metatrader4
adobe-analytics
tomcat6
fancybox-3
offline
n-gram
zebra-printers
hapi
telephony
ef-migrations
invantive-sql
sms-gateway
nhibernate-envers
firefox-webextensions
alpine
swiftlint
jquery-ajaxq
tapestry
microsoft-r
typo3-6.2.x
nouislider
preg-match
scorm2004
catel
android-kernel
mozilla
multilingual
occlusion
uft-api
elasticsearch-plugin
graphenedb
pdf-reactor
elmah
flashair
fault
revapi
promela
typescript1.8
pebble-watch
aurelia-validation
feeds
hittest
redundancy
setuptools
slicknav
savon
autorest
gstreamer-0.10
persist
whois
hsv
msys
lemon
sdhc
retina
unity3d-gui
census
oxwall
knuth
wp-query
doskey
concurrent-collections
uv-mapping
geos
orchardcms-1.7
dmoz
path-separator
dbproviderfactories
regsvr32
windows-phone-7.1.1
buildr
blackberry-playbook
coercion
yui-datatable
jmock
blitz++
infrastructure
substrings
mediarss
lzh

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App