public class BinTreeProg {
public static void main (String [] args) {
try {
int i;
BinTree2 root = new BinTree2(args[0]);
for (i = 1; i < args.length-1; i++)
root.binTree2Insert (args[i]);
root.binTree2Traverse();
System.out.println (root.binTree2Exists (args[args.length-1]));
System.out.println (root.binTree2CountOccurance (args[args.length-1]));
/*System.out.println (root.binTree2BalancedCounter (args[args.length-1]));
System.out.println (root.binTree2TotalyBalanced());
System.out.println (root.binTree2MaxPathLength());
System.out.println (root.binTree2CountNodes());*/
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println ("Usage: BinTree2Prog Data1 Data2 Data3 ...Keyword");
System.exit (-1);
}
}
static class BinTree {
BinTree l;
BinTree r;
String v;
BinTree getl () {
return this.l;
}
BinTree getr () {
return this.r;
}
void binTree2Insert (String val) {}
void binTree2Traverse () {}
boolean binTree2Exists (String val) {return false;}
int binTree2CountOccurance (String val) {return 0;}
boolean binTree2isBalanced (String val) {return false;}
int binTree2MaxPathLength () {return 0;}
int binTree2CountNodes () {return 0;}
int binTree2BalancedCounter (String val) {return 0;}
boolean binTree2TotalyBalanced () {return false;}
}
static class BinTree2 extends BinTree {
String v;
BinTree2 (String val) {
this.v = val;
}
void binTree2Insert (String val) {
if (this.v.compareTo (val) < 0) {
if (getl() == null)
this.l = new BinTree2 (val);
else
getl().binTree2Insert (val);
}
else {
if (getr() == null)
this.r = new BinTree2 (val);
else
getr().binTree2Insert (val);
}
}
void binTree2Traverse () {
if (getl() != null)
getl().binTree2Traverse();
System.out.println (this.v);
if (getr() != null)
getr().binTree2Traverse();
}
boolean binTree2Exists (String val) {
boolean flag;
if (this.v.compareTo (val) == 0)
flag = true;
else if (this.v.compareTo (val) < 0) {
if (getl() == null)
flag = false;
else
flag = getl().binTree2Exists (val);
}
else {
if (getr() == null)
flag = false;
else
flag = getr().binTree2Exists (val);
}
return flag;
}
int binTree2CountOccurance (String val) {
int count = 0;
if (this.v.compareTo (val) == 0) {
if (getl() != null)
count = 1 + getl().binTree2CountOccurance(val);
else
count = 0;
if (getr() != null)
count = 1 + getr().binTree2CountOccurance(val);
}
else if (this.v.compareTo (val) < 0) {
if (getl() == null)
count = 0;
else
count = getl().binTree2CountOccurance (val);
}
else {
if (getr() == null)
count = 0;
else
count = getr().binTree2CountOccurance (val);
}
return count;
}
boolean binTree2isBalanced (String val) {
if (binTree2BalancedCounter (val) != 0)
return false;
return true;
}
int binTree2BalancedCounter (String val) {
int retval = 0;
if (getl() != null) {
if (getl().v.compareTo (val) == 0)
retval += (1+getl().binTree2BalancedCounter (val));
else
retval += getl().binTree2BalancedCounter (val);
}
else
retval += 0;
if (getr() != null) {
if (getr().v.compareTo (val) == 0)
retval += (-1+getr().binTree2BalancedCounter (val));
else
retval += getr().binTree2BalancedCounter (val);
}
else
retval += 0;
return retval;
}
boolean binTree2TotalyBalanced () {
boolean retval = true;
if (getl() != null)
retval = retval && getl().binTree2TotalyBalanced();
retval = retval && binTree2isBalanced(this.v);
if (getr() != null)
retval = retval && getr().binTree2TotalyBalanced();
return retval;
}
int binTree2MaxPathLength () {
int lengthl = 0;
int lengthr = 0;
int length = 0;
if ((getl() == null) && (getr() == null))
length = 1;
else {
if (getl() != null)
lengthl = getl().binTree2MaxPathLength();
if (getr() != null)
lengthr = getr().binTree2MaxPathLength();
if (lengthl > lengthr)
length = lengthl + 1;
else
length = lengthr + 1;
}
return length;
}
int binTree2CountNodes () {
int count = 0;
if (getl() != null)
count += getl().binTree2CountNodes();
count += 1;
if (getr() != null)
count += getr().binTree2CountNodes();
return count;
}
}
}