Class Project: AVL Tree

A class project using AVL tree:

You will be supplied with a list of 40,000+ records of data about people. The task is toread the file into a linked list, and then build a balanced binary tree in ascendingalphabetical order by last name. The Customer.txt file has the entire list. The testdb.txtfile contains the first few records of the customer.txt file for use in debugging your code.I have provided a template of technique for reading data from a file: filereader.java. Thisprogram will create a doubly-linked list of all the records in the file.

Your task is to traverse the linked list of records, and add each record to the binary tree.The tree must be in order at all times. The tree must be balanced using the AVLtechnique in which some nodes are rotated each time the addition of a new item causesthe tree to be imbalanced. If you encounter duplicate names, discard the second andsubsequent records, or use another consistent approach to ordering your tree. Measurethe execution time of the tree building operation, and report it to a GUI. Also, print thelast 10 values of LAST NAME from an “in-order” traversal to a GUI. For those 10items, also display the right-depth and left-depth for each node.

In addition to building the tree, your GUI should allow the user to search for a specificlast name. After the tree is built, your GUI should accept a search string, measure thetime to find the correct record, and display all the fields of the found record in a text area.Or, if the search does not produce a result, your application should indicate a failedsearch. The user should be able to search as often as they want without having to rebuildthe tree. 


Use a stack to track path, for updating height and rotating.

import java.util.ArrayList;
import java.util.LinkedList;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.lang.Math;

public class AVLTree{
	
	private TreeNode root;
	
	public AVLTree()
	{
		root = null;
	}
	
	public boolean isEmpty()
	{
		return root == null;
	}
	
	public void clear()
	{
		root = null;
	}
	
	public TreeNode getRoot()
	{
		return root;
	}
	
	//If no customer with this lastname, return null.
	public ArrayList<String> getCustomerInfo(String lastname)
	{
		LinkedList<TreeNode> pathStack = search(lastname);
		
		//Tree is empty
		if(pathStack.isEmpty())
			return null;
		TreeNode stackTop = pathStack.pop();
		
		//Find customers with this lastname.
		if(lastname.compareTo(stackTop.getLastname()) == 0)
			return stackTop.getAllCustomer();
		
		//No customers with this lastname.
		else
			return null;
	}

	public void insertCustomer(int recnum, String firstname, String lastname, 
			String address, String city, String state, String zip,
			String date, String code1, String code2, String code3, String code4)
	{
		InfoData customerInfo = new InfoData(recnum, firstname, address, city, 
				state, zip, date, code1, code2, code3, code4);
		LinkedList<TreeNode> pathStack = search(lastname);
		
		//Tree is empty. Create root node.
		if(pathStack.isEmpty())
		{
			root = new TreeNode(lastname, customerInfo);
			return;
		}
		TreeNode stackTop = pathStack.pop();
		int cmp = lastname.compareTo(stackTop.getLastname());
		
		//Find customers with this lastname. Just add one record into this node.
		if(cmp == 0)
		{
			stackTop.addCustomer(customerInfo);
			return;
		}
		
		//No customers with this lastname. Create a new TreeNode with this lastname.
		TreeNode nodeToAdd = new TreeNode(lastname, customerInfo);
		if(cmp < 0)
			stackTop.setLchild(nodeToAdd);
		else
			stackTop.setRchild(nodeToAdd);
		stackTop.setHeight(2);
		
		//AVL Part
		while(!pathStack.isEmpty())
		{
			TreeNode current = pathStack.pop();
			int lchildHeight = current.getLchildHeight();
			int rchildHeight = current.getRchildHeight();
			int newHeight = Math.max(lchildHeight, rchildHeight) + 1;
			
			//If current height doesn't change, tree is balanced.
			if(newHeight == current.getHeight())
				break;
			
			//If current height changes, check if it is balanced.
			//Still balanced. Update height.
			if(Math.abs(rchildHeight - lchildHeight) <= 1)
				current.setHeight(newHeight);
			//Not balanced.
			else
			{
				TreeNode newcurrent = null;
				int type = rotateType(current, lchildHeight, rchildHeight);
				
				//Start rotation.
				switch (type){
				case 1: newcurrent = rotateRight(current);
						break;
				case 2: newcurrent = rotateLeftThenRight(current);
						break;
				case 3: newcurrent = rotateLeft(current);
						break;
				case 4: newcurrent = rotateRightThenLeft(current);
						break;
				default: break;
				}
				
				//Deal with the new root.
				if(!pathStack.isEmpty())
				{
					TreeNode parent = pathStack.pop();
					if(newcurrent.getLastname().compareTo(parent.getLastname()) < 0)
						parent.setLchild(newcurrent);
					else
						parent.setRchild(newcurrent);
				}
				else
					root = newcurrent;
				
				//After rotation, tree is balanced.
				break;
			}
		}
	}
	
	public void writeDotFile(String outputFile) throws FileNotFoundException
	{
		PrintWriter file = new PrintWriter(new File(outputFile+".dot"));
		file.println("digraph program5 {");
		if(root != null)
			travalseForDot(root, file);
		file.print("}");
		file.close();
	}
	
	private void travalseForDot(TreeNode node, PrintWriter file)
	{
		TreeNode left = node.getLchild();
		TreeNode right = node.getRchild();
		if(left != null)
		{
			file.println("\""+node.getLastnamePlusFactor()+"\" -> \""+left.getLastnamePlusFactor()+"\";");
			travalseForDot(left, file);
		}
		if(right != null)
		{
			file.println("\""+node.getLastnamePlusFactor()+"\" -> \""+right.getLastnamePlusFactor()+"\";");
			travalseForDot(right, file);
		}
	}
	
	//Use a stack to track the path:
	//If tree is empty(root is null), pathStack is empty.
	//If find the node with this lastname, the top of stack is that node.
	//If no node with this lastname, the top of stack is the parent node which will be used for insert.
	private LinkedList<TreeNode> search(String lastname)
	{
		LinkedList<TreeNode> pathStack = new LinkedList<TreeNode>();
		TreeNode current = root;
		while(current != null)
		{
			pathStack.push(current);
			int cmp = lastname.compareTo(current.getLastname());
			if(cmp == 0)
				break;
			else if(cmp < 0)
				current = current.getLchild();
			else
				current = current.getRchild();
		}
		return pathStack;
	}
	
	private int rotateType(TreeNode current, int lchildHeight, int rchildHeight)
	{
		if(lchildHeight > rchildHeight)
		{
			int llchildHeight = current.getLchild().getLchildHeight();
			int lrchildHeight = current.getLchild().getRchildHeight();
			if(llchildHeight > lrchildHeight)
				return 1;
			else
				return 2;
		}
		else
		{
			int rlchildHeight = current.getRchild().getLchildHeight();
			int rrchildHeight = current.getRchild().getRchildHeight();
			if(rrchildHeight > rlchildHeight)
				return 3;
			else
				return 4;
		}
	}
	
	private TreeNode rotateRight(TreeNode current)
	{
		//System.out.println("Rotate Type: 1");
		TreeNode newcurrent = current.getLchild();
		current.setLchild(newcurrent.getRchild());
		newcurrent.setRchild(current);
		
		current.computeHeightAndSet();
		newcurrent.computeHeightAndSet();
		
		return newcurrent;
	}
	
	private TreeNode rotateLeftThenRight(TreeNode current)
	{
		//System.out.println("Rotate Type: 2");
		current.setLchild(rotateLeft(current.getLchild()));
		return rotateRight(current);
	}
	
	private TreeNode rotateLeft(TreeNode current)
	{
		//System.out.println("Rotate Type: 3");
		TreeNode newcurrent = current.getRchild();
		current.setRchild(newcurrent.getLchild());
		newcurrent.setLchild(current);
		
		current.computeHeightAndSet();
		newcurrent.computeHeightAndSet();
		
		return newcurrent;
	}
	
	private TreeNode rotateRightThenLeft(TreeNode current)
	{
		//System.out.println("Rotate Type: 4");
		current.setRchild(rotateRight(current.getRchild()));
		return rotateLeft(current);
	}
	
}

import java.util.ArrayList;
import java.lang.Math;

public class TreeNode{
	
	private String lastname;
	private ArrayList<InfoData> customerList;
	private int height;
	private TreeNode lchild;
	private TreeNode rchild;
	
	//Constructor.
	public TreeNode(String inlastname, InfoData customerInfo)
	{
		lastname = inlastname;
		customerList = new ArrayList<InfoData>();
		customerList.add(customerInfo);
		height = 1;
		lchild = null;
		rchild = null;
	}
	
	public String getLastname()
	{
		return lastname;
	}
	
	public String getLastnamePlusFactor()
	{
		return lastname+"--factor:"+Integer.toString(getLchildHeight()-getRchildHeight());
		//return lastname+"--factor:"+height;
	}
	
	public void addCustomer(InfoData customerInfo)
	{
		customerList.add(customerInfo);
	}
	
	public int getHeight()
	{
		return height;
	}
	
	public void setHeight(int heightToset)
	{
		height = heightToset;
	}
	
	public int computeHeightAndSet()
	{
		height = Math.max(getLchildHeight(), getRchildHeight()) + 1;
		return height;
	}
	
	public int getLchildHeight()
	{
		if(lchild != null)
			return lchild.getHeight();
		else
			return 0;
	}
	
	public int getRchildHeight()
	{
		if(rchild != null)
			return rchild.getHeight();
		else
			return 0;
	}

	public TreeNode getLchild()
	{
		return lchild;
	}
	
	public TreeNode getRchild()
	{
		return rchild;
	}
	
	public void setLchild(TreeNode lchildToset)
	{
		lchild = lchildToset;
	}
	
	public void setRchild(TreeNode rchildToset)
	{
		rchild = rchildToset;
	}
	
	public ArrayList<String> getAllCustomer()
	{
		ArrayList<String> result = new ArrayList<String>(customerList.size());
		for(int i=0;i<customerList.size();++i)
		{
			InfoData tmp = customerList.get(i);
			String name = ", Name: " + tmp.getFirstname() + " " + lastname;
			result.add("Recnum: " + tmp.getRecnum() + name + 
					", " + customerList.get(i).getInfoNoFirstname());
		}
		return result;
	}

}

public class InfoData{
	
	private int recnum;
	private String firstname;
	private String address;
	private String city;
	private String state;
	private String zip;
	private String date;
	private String code1;
	private String code2;
	private String code3;
	private String code4;
	
	//constructor. For debug.
	public InfoData(String infirstname)
	{
		recnum = 0;
		firstname = infirstname;
		address = "";
		city = "";
		state = "";
		zip = "";
		date = "";
		code1 = "";
		code2 = "";
		code3 = "";
		code4 = "";
	}
	
	//constructor.
	public InfoData(int inrecnum, String infirstname, String inaddress, String incity, String instate, String inzip, String indate, String incode1, String incode2, String incode3, String incode4)
	{
		recnum = inrecnum;
		firstname = infirstname;
		address = inaddress;
		city = incity;
		state = instate;
		zip = inzip;
		date = indate;
		code1 = incode1;
		code2 = incode2;
		code3 = incode3;
		code4 = incode4;
	}
	
	public int getRecnum()
	{
		return recnum;
	}
	
	public String getFirstname()
	{
		return firstname;
	}
	
	public String getInfoNoFirstname()
	{
		return "Address: " + address + ", " + "City: " + city + ", " 
				+ "State: " + state + ", Zip: " + zip + ", Date: " + date
				+ ", Code1: " + code1 + ", Code2: " + code2
				+ ", Code3: " + code3 + ", Code4: " + code4;
	}
	
}

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class AVL_Iterator implements Iterator<TreeNode>{

	private Iterator<TreeNode> itr;
	private ArrayList<TreeNode> queue;
	
	public AVL_Iterator(AVLTree tree)
	{
		queue = new ArrayList<TreeNode>();
		travalse(tree.getRoot());
		itr = queue.iterator();
	}
	
	@Override
	public boolean hasNext() {
		return itr.hasNext();
	}

	@Override
	public TreeNode next() {
		return itr.next();
	}

	@Override
	public void remove() {
		itr.remove();
	}
	
	public LinkedList<TreeNode> getLastTen()
	{
		LinkedList<TreeNode> list = new LinkedList<TreeNode>();
		for(int i=1;i<=10;++i)
			list.push(queue.get(queue.size()-i));
		return list;
	}
	
	private void travalse(TreeNode node)
	{
		if(node != null)
		{
			travalse(node.getLchild());
			queue.add(node);
			travalse(node.getRchild());
		}
	}
	
}

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;

public class Test{
	
	public static void main(String[] args) throws FileNotFoundException
	{
		AVLTree tree = new AVLTree();
		
		FileReader fr;
		Fileinput go = new Fileinput();
		Link head = new Link();
		Link tail = new Link();
		head.next = tail;
		head.pred = null;
		tail.next = null;
		tail.pred = head;

		try {
				fr = new FileReader("Customer.txt");
				go.charreader(fr, tail);
		}
		catch (IOException e) {
			return;
		}
		
        Link mylink = head;
        do{
        	mylink = mylink.next;
        	DBrecord tmp = mylink.node;
            tree.insertCustomer(tmp.recnum, tmp.fname, tmp.lname, tmp.address, 
            		tmp.city, tmp.state, tmp.zip, tmp.date, 
            		tmp.code1, tmp.code2, tmp.code3, tmp.code4);
        }
        while(mylink != tail.pred);
        
        tree.writeDotFile("out");
        
        //Get last ten nodes.
        System.out.println("Get last ten nodes:");
        AVL_Iterator itr = new AVL_Iterator(tree);
        LinkedList<TreeNode> lastten = itr.getLastTen();
        for(int i=0;i<10;++i)
        {
        	TreeNode tmp = lastten.pop();
        	System.out.println("Lastname: "+tmp.getLastname()
        			+", Left depth: "+tmp.getLchildHeight()+
        			", Right depth: "+tmp.getRchildHeight());
        }
        System.out.println();
        
        //Search.
        String searchTerm = "SMITH";
        System.out.println("Search Lastname: " + searchTerm);
        ArrayList<String> searchresult = tree.getCustomerInfo(searchTerm);
        if(searchresult == null)
        	System.out.println("No records with lastname "+searchTerm);
        else
        	for(int i=0;i<searchresult.size();++i)
        		System.out.println(searchresult.get(i));
	}
		
}

import java.io.*;

public class Fileinput
{

  void addlist(Link tail, DBrecord newitem){
        DBrecord temp = new DBrecord();
	temp.recnum = newitem.recnum;
	temp.fname = newitem.fname;
	temp.lname = newitem.lname;
	temp.address = newitem.address;
	temp.city = newitem.city;
	temp.state = newitem.state;
	temp.zip = newitem.zip;
	temp.date = newitem.date;
	temp.code1 = newitem.code1;
	temp.code2 = newitem.code2;
	temp.code3 = newitem.code3;
	temp.code4 = newitem.code4;

        Link tem = new Link();
        tem.pred = tail.pred;
        tem.next = tail;
        tem.node = temp;
	tail.pred.next = tem;
	tail.pred = tem;

	}// end of addlist method



    void charreader(InputStreamReader isr, Link taillist) throws IOException {
	String temp = "";
	int c = 0;
	int numcommas = 0;
	int numrecords = 0;
	int serialnum = 1000000;
	int namenum = 1;
	String testchar = ",\"\n\r";
	boolean withinquotes = false;
	DBrecord tempnode = new DBrecord();


	while ((c = isr.read()) != -1) {//checking for End of File, read one char

		int index = testchar.indexOf(c);
		  switch(index){
		  case -1: temp = temp + (char) c;
				 break;
		  case 0: if( !withinquotes){
                            switch(numcommas){
				case 0: tempnode.recnum = Integer.parseInt(temp);
					numcommas++;
					temp = "";
					break;
				case 1: tempnode.fname = temp;
					numcommas++;
					temp = "";
					break;
				case 2: if (temp == "" || temp == "''") {
             				temp = "SMITH" + namenum;
	     				namenum++;}
					tempnode.lname = temp;
					numcommas++;
					temp = "";
					break;
				case 3: tempnode.address = temp;
					numcommas++;
					temp = "";
					break;
				case 4: tempnode.city = temp;
					numcommas++;
					temp = "";
					break;
				case 5: tempnode.state = temp;
					numcommas++;
					temp = "";
					break;
				case 6: tempnode.zip = temp;
					numcommas++;
					temp = "";
					break;
				case 7: tempnode.date = temp;
					numcommas++;
					temp = "";
					break;
				case 8: tempnode.code1 = temp;
					numcommas++;
					temp = "";
					break;
				case 9: if (temp == "" || temp == "''") {
             				temp = "CAP" + serialnum;
	     				serialnum++;}
					tempnode.code2 = temp;
					numcommas++;
					temp = "";
					break;
				case 10: tempnode.code3 = temp;
					numcommas++;
					temp = "";
					break;
				}// end inner switch
                            }// end if statement block
                            else temp = temp + c;
                            break;
		  case 1: withinquotes = !withinquotes;
                      	    break;
                  case 3: break;

                  case 2: tempnode.code4 = temp;
			   temp = "";
			   numcommas = 0;
			   numrecords++;
			   withinquotes = false;
			   this.addlist(taillist,tempnode);
			   break;
                    }// end outer switch

	}// end while loop


    }// end charreader method

    public static void main(String args[]) {// reads filename from console at runtime
		FileReader fr;
		Fileinput go = new Fileinput();
		Link head = new Link();
		Link tail = new Link();
		head.next = tail;
		head.pred = null;
		tail.next = null;
		tail.pred = head;

		try {


				fr = new FileReader("testdb.txt");
				go.charreader(fr, tail);


		}
		catch (IOException e) {
			return;
		}

                Link mylink = head;
                do{
                  mylink = mylink.next;
                  System.out.println(mylink.node.lname);
                  }
                while(mylink != tail.pred);
	}// end of main method
}// end of class definition



class DBrecord {

  	int recnum;
  	String fname;
  	String lname;
  	String address;
  	String city;
  	String state;
  	String zip;
  	String date;
  	String code1;
  	String code2;
  	String code3;
  	String code4;

  	
}

class Link {

  	Link pred;
	Link next;
	DBrecord node;

}//end of class



TEST FILE: Customer.txt

1,"BOB","NYDEGGER",,"SALT LAKE CITY","UT","84117",6/17/1994 0:00:00,0,"3414A49184","C",708
2,"JOHN","KOLBERG","17W275 BUTTERFIELD RD","OAKBROOK TERRACE","IL","60181",7/1/1994 0:00:00,0,"3414A62262","C",702
3,"CAROL","YALETCHKO","91-1072 NIHOPEKU STREET","KAPOLEI","HI","96707-1927",6/29/1994 0:00:00,0,"3414A48835","C",701
4,"GREGORY","ROLOFF","12020 W RIPLEY AVENUE","WAUWATOSA","WI","53226",,0,"3337A44471","C",702
5,"JAY","MARTINDALE","P O BOX 176","JEFFERSON CITY","MO","65102-0176",,0,,"C",702
6,"DONNA","ENGLER","730 N 109TH STREET","WAUWATOSA","WI","53226",4/21/1994 0:00:00,0,"3414A13825","C",720
7,"EDWARD","WENNERSTEN","425 FISHER ST","MARQUETTE","MI","49855",,0,,"C",708
8,"JOHN","ROUSE","3700 ROSS AVE BOX 44","DALLAS","TX","75204",6/27/1994 0:00:00,0,"3414A62132","C",708
9,"HOWARD","BOCK","P.O. BOX 223356","DALLAS","TX","75222-3566",6/24/1994 0:00:00,0,"341A31993","A",708
10,"JAMES","HUNTENBURG","15 SPRING WHEEL ROAD SUITE 34","HINSDALL","IL","60521",6/28/1994 0:00:00,0,,"C",701
11,"PATRICK","RICE",,"CHEYENNE","WY","82001",,0,,"C",712
12,"MICHAEL","RAHBAN","17532 LORI ANN LANE","CERRITOS","CA","90701",6/17/1994 0:00:00,0,"3414A67522","C",720
13,"TAMMY","HEMMINGWAY",,"BROOMFIELD","CO","80020",5/18/1994 0:00:00,0,"3414A41153","A",719
14,"NORDY","JENSEN","1500 ILLINOIS GUGG STE 306","GOLDEN","CO","80401",,0,,"A",704
15,"MICHAEL","BEERY","275 MARKET STREET SUITE 546","MINNEAPOLIS","MN","55405",,0,,"A",712
16,"BONITA","LONN","1600 NOKOMIS COURT","MINNEAPOLIS","MN","55417",5/19/1994 0:00:00,0,"3316J60825","A",
17,"GAYLARD","WILLIAMS ESQ","3330 OLIVE STREET, SUITE 200","ST LOUIS","MO","63103",4/1/1994 0:00:00,0,"3316J42831","C",710
18,"ANTONIO","ALCALA","1019 QUEEN ST","ALEXANDRIA","VA","22314",5/4/1994 0:00:00,0,,"C",704
19,"SANDRA","GREGERSON",,"MARINETTE","WI","54143",6/28/1994 0:00:00,0,"3316J34185","C",719
20,"CAROL","LAUREY","19855 MUIRFIELD CIRCLE","SHOREWOOD","MN","55331",5/27/1994 0:00:00,0,"3414A43033","A",721
21,"DOUGLAS","MIERS","P.O. BOX 1968","ELKHART","IN","46515-1968",5/9/1994 0:00:00,0,"3316J40620","B",715
22,"KENNETH","BLACK","124 JOHNSONS FERRY RD","ATLANTA","GA","30328",6/27/1994 0:00:00,0,"3414A38981","C",701
23,"JOHN","RITZERT","10837 MAIN STREET SUITE 200","FAIRFAX","VA","22030",6/15/1994 0:00:00,0,"3316J23828","C",710
24,"MARTY","PARRISH","722 E BROADWAY BLVD","WEST MEMPHIS","AR","72301",4/20/1994 0:00:00,0,,"C",701
25,"HARRY","HADSELL","P O BOX 4967","WALNUT CREEK","CA","94596",,0,,"C",718
26,"KIYOTAKA","KIKUCHI","44060 OLD WARM SPRINGS BLVD","FREMONT","CA","94538",6/9/1994 0:00:00,0,"3316J06434","C",711
27,"JAMES","GREGORY","7083-J COMMERCE CIRCLE","PLEASANTON","CA","94588",5/5/1994 0:00:00,0,"3414A21771","C",720
28,"MARK","HARRISON","128 SOUTH TRYON ST","CHARLOTTE","NC","28202",6/27/1994 0:00:00,0,"3414A38381","C",712
29,"DALLAS","MOLERIN","66 GLENBROOK RD","STAMFORD","CT","06902",2/25/1994 0:00:00,0,"3337A71601","C",710
30,"DAVID","HUDSON","1301 MEMORIAL DRIVE","CORAL GABLES","FL","33124",6/24/1994 0:00:00,0,"3337A34418","A",705
31,,,"3RD FLOOR","LOS ANGELES","CA","90064",,0,"3337A79351","C",
32,"STEVEN","HERF","6422 BELLE RIVE","NEWBURGH","IN","47630",6/28/1994 0:00:00,0,"3717A48829","C",
33,"JEFFERY","BUDDAY","805 E MAPLE STE 300","BIRMINGHAM","MI","48009",6/15/1994 0:00:00,0,"3414A31166","C",720
34,"BOB","LABOUY","2777 70TH PLACE S.E.","MERCER ISLAND","WA","98040",5/14/1994 0:00:00,0,"3316J16653","C",720
35,"DAVID","GRUBB","6672 MADISON ST.","MERRILLVILLE","IN","46410",6/15/1994 0:00:00,0,"3316J10456","C",718
36,"JAMES","BRISCOE","15274 PORTAGE ST.","DOYLESTOWN","OH","44230-1129",2/14/1994 0:00:00,0,"3337A51931","A",720
37,"MARY","VAN OSDELL","302 FAIRVIEW ST","HOUSTON","TX","77006",5/19/1994 0:00:00,0,"3414A28113","A",711
38,"JAMES","BARNES",,"CRAWFORDSVILLE","IN","47933",6/28/1994 0:00:00,0,"3316J56193","B",705
39,"MICAH","SLAUGHTER","1312 SAM HOUSTON AVENUE","HUNTSVILLE","TX","77340",6/27/1994 0:00:00,0,"3414A53524","A",719
40,"ROBERT","TAYLOR","317 ROSEBANK AVE","NASHVILLE","TN","37206-1459",6/21/1994 0:00:00,0,"3414A43542","A",706
41,"CAROLE","HAMILTON","2269 MIDWICK DR","ALTADENA","CA","91001",5/7/1994 0:00:00,0,"3414A08009","A",706
42,"BRUCE","WILSON","400 COLUMBIA ST SUITE 100","VANCOUVER","WA","98660",5/24/1994 0:00:00,0,"3414A09120","C",707
43,"CHARLES","JOHNSON","8640 WEST ANN RD","LAS VEGAS","NV","89129",,0,"3414A27140","C",705
44,"ARNOLD","KATZ","PO BOX 949","N. CHELMSFORD","MA","01863",5/20/1994 0:00:00,0,"3316J8120","B",702
45,"GARY","MCKELVY","214 WRIGHT STREET","DELAVAN","WI","53115",6/1/1994 0:00:00,0,"3414A09106","C",712
46,"DANELLE","READ","626 GENEVA ST","LAKE GENEVE","WI","53147",,0,,"C",
47,"JENNIFER","MILLER",,"PINEY FLATS","TN","37686",5/1/1994 0:00:00,0,"3316J10897","C",718
48,"JOSEPH","ADAMS",,"TOMS RIVER","NJ","08753",6/15/1994 0:00:00,0,"3316J28689","C",720
49,"DENNIS","FLINT","5904 LOCHENVARS TRAIL","MARSHALL","WI","53559",6/15/1994 0:00:00,0,"3337A91568","C",720
50,"WAYNE","FOUNTAIN","P O BOX 3567","DAVENPORT","IA","52808-3567",5/30/1994 0:00:00,0,"3414A08742","C",707
51,"DEANNA","CABLE","2480 OPDYKE ROAD","BLOOMFIELD HILLS","MI","48304",5/15/1994 0:00:00,0,"3414A31534","C",702
52,"MICHAEL","JORDAN","P O BOX 17404","WASHINGTON","DC","20041",6/27/1994 0:00:00,0,"3414A62686","A",
53,"TERRY","COOK","PO BOX 164255","AUSTIN","TX","78746-4255",1/15/1994 0:00:00,0,"3337A69042","A",720
54,"CAROLINE","RHUYS","2049 CENTURY PARK EAST SUITE 2050","LOS ANGELES","CA","90067",6/10/1994 0:00:00,0,"3316J10386","B",710
55,"PETER","SCHREINER","1158 1/2 NORTH FULLER AVENUE","WEST HOLLYWOOD","CA","90046",1/10/1994 0:00:00,0,"3337A46384","A",720
56,"JOHN","JACOBSEN","1341 E COLORADO BLVD SUITE 211","PASADENA","CA","91106",5/14/1994 0:00:00,0,"3414A19872","A",706
57,"FRED","HEIMANN","49 DEERING STREET","PORTLAND","NE","04101",5/30/1994 0:00:00,0,"122668","C",702
58,"B","PIDGEON","5210 CLINTON STREET","LOS ANGELES","CA","90004",6/15/1994 0:00:00,0,"3316J8304","B",
59,"GEORGE","KAUFFMAN","19640 N. 31ST AVE","PHOENIX","AZ","85027",6/15/1994 0:00:00,0,"3414A27346","A",708
60,"STEVE","CHU","295 N MAPLE AVE","BASKING RIDGE","NJ","07920",6/20/1994 0:00:00,0,"3414A38038","C",708
61,"RICHARD","HUBBERT","P O BOX 289","GRAYSVILLE","AL","35073-289",5/15/1994 0:00:00,0,,"C",703
62,"BRUCE","CANADA","133 WHIPPORWILL ROAD","BRANDON","MS","39042",5/18/1994 0:00:00,0,"3414A35079","C",708
63,"ROBERT","COOK","2528 CLIFTY DR","MADISON","IN","47250",6/23/1994 0:00:00,0,"3414A43706","A",703
64,"ROBERT","TROMBLEY","142-02 20TH AVE","FLUSHING","NY","11351-9711",6/28/1994 0:00:00,0,"3414A32011","C",704
65,"MELISSA","PARCHER","FASER HALL","UNIVERSITY","MS","38677",6/28/1994 0:00:00,0,"233650","C",704
66,"CHRIS","BEATTY","23 BILLS WAY","LANDENBEG","PA","19350",6/10/1994 0:00:00,0,"3414A24105","C",720
67,"CHRISTOPHER","HORN","6800 MCCORMICK ROAD","CHICAGO","IL","60645",5/20/1994 0:00:00,0,"3414A08133","C",705
68,"DENISE","UMPOROWICZ","2160 S FIRST AVE","MAYWOOD","IL","60153",6/21/1994 0:00:00,0,"3414A73677","A",720
69,"CHARLES","CALDWELL","1061 ARNOLD WAY","ALPINE","CA","91901-2721",7/30/1994 0:00:00,0,"USB4505017","C",
70,,"DE DLERCQ",,"GENT","B-","9000",3/21/1994 0:00:00,423,,"C",705
71,"J.-FRANCOIS","MOREROD",,"LES DIABLERETS","CH","1865",7/1/1994 0:00:00,441,"3376J03742","C",720
72,"WALTER","WINTERFELD","BORSELSTRASSE 3-7","HAMBURG",,"22675",5/10/1994 0:00:00,428,"3337A93474","C",703
73,"LARRY","BEEBE","6062 LITTLE LAKE DR","MASON","OH","45040",8/10/1994 0:00:00,0,"3414A59956","A",718
74,"MARIE","CUNNINGHAM","131 W. MAIN ST.","MOUNTVILLE","PA","17554",6/30/1994 0:00:00,0,"3414A21608","A",720
75,"JACQUELINE","CARTER-MATSAPOLA","2318 FLOSSMOOR ROAD","FLOSSMOOR","IL","60422",7/10/1994 0:00:00,0,,"C",702
76,"DONNA","MARTIN","P.O. BOX 2673","FREMONT","CA","94536-0673",7/30/1994 0:00:00,0,"195660ABA","C",705
77,"BRAD","GOTFRIED","2201 SE INDIAN STREET","STUART","FL","34997",7/12/1994 0:00:00,0,"3414A43922","A",720
78,"DANA","ASWAD","3205 BIOSLI II","IRVINE","CA","92717-3900",8/17/1994 0:00:00,0,"3316J30401","B",705
79,"WENDELL","HIGGINS","812 LA CASSIA DRIVE","BOISE","ID","83705",5/23/1994 0:00:00,0,"3414A14648","C",720
80,,,"P O BOX 3136","BOISE","ID","83703",3/15/1994 0:00:00,0,"3337A75775","C",
81,"EVAN","CROSS","395 MARCBOROUGH ST. # 2F","BOSTON","MA","02115",,0,"3337A46767","C",720
82,"GARY","LARSON","421 NORTH 10 TH STREET","WINTERSET","IA","50273",8/15/1994 0:00:00,0,"3337A52864","C",
83,"NORMAN","LEVY","16822 SE 56TH PL","BELLEVUE","WA","98006",7/19/1994 0:00:00,0,"3414A37219","C",703
84,"LEE","GORDON","512 CLASSROOM BLDG","UNIVERSITY PARK","PA","16802-2113",,0,"3414A20287","C",720
85,"SUSAN","WILLIS","131 STATE STREET","BOSTON","MA","01944",8/15/1994 0:00:00,0,"3316J24687","A",720
86,"MICHAEL","KIMBALL","2323 DEL MAR ROAD APT 1","MONTROSE","CA","91020",5/20/1994 0:00:00,0,"3337A78914","C",710
87,"RAINER","LANGSTROM","BOX 32","ESLOV",,"24121",2/20/1994 0:00:00,401,"3337A45251","C",712
88,"JOHANN","EISENTIEDET","PF 32","KOSCHING",,"85082",8/8/1994 0:00:00,428,,"B",719
89,"THOMAS","MORGAN","29400 LAKELAND BLVD","WICKLIFFE","OH","44092-2298",8/15/1994 0:00:00,0,"3414A47372","C",708
90,"MARY","SHEBELL","16271 SPARTAN CIRCLE","HUNTINGTON BEACH","CA","92649-2529",6/11/1994 0:00:00,0,"3337A61348","A",720
91,"GENE","FARNELL","3201 SOUTH SUSAN STREET","SANTA ANA","CA","92704",8/15/1994 0:00:00,0,"3414A44338","A",708
92,"WADE","HAMILTON","327 NORTH 10TH ST.","NEWARK","NJ","07107-1909",8/10/1994 0:00:00,0,"3337A45669","C",707
93,"PAUL","KINGSOLVER","2400 CITY CENTER SQUARE","KANSAS CITY","MO","64105",7/1/1994 0:00:00,0,"3316J68308","B",
94,"DONALD","MUEHLBAUER","N17W24300 RIVERWOOD DR","WAUKESHA","WI","53188",8/15/1994 0:00:00,0,"3337A33793","A",706
95,"RICHARD","LINDEEN","7676 TURNER RD","MAPLE PLAIN","MN","55359",8/14/1994 0:00:00,0,"3414A47269","A",702
96,"JAMES","HUNT, JR","P O BOX 121554","NASHVILLE","TN","37212-1554",5/15/1994 0:00:00,0,"3337A76108","A",708
97,"MARTIN","SANZONE","3000 WAYNE MEMORIAL DRIVE","GOLDSBORO","NC","27533-8002",7/15/1994 0:00:00,0,"3316J72020","C",705
98,,,,,,,,428,,"C",703
99,"JENNY","UNDERWOOD","5333 N. 7TH ST. STE B220","PHOENIX","AZ","85014",7/28/1994 0:00:00,0,"3337A94241","A",712
100,"RANDY","HARISON","419 CENTURY PLAZA DR STE 200","HOUSTON","TX","77073",8/16/1994 0:00:00,0,"3316J66798","C",702
101,"BETSY","HANSELL","1408 YARDLEY ROAD","YARDLEY","PA","19067",4/15/1994 0:00:00,0,"3337A78912","C",704
102,"GORDON","WILLIS","346 COMPTON HILLS DRIVE","CINCINNATI","OH","45215",8/13/1994 0:00:00,0,"3414A59959","C",706
103,"DIANE","ROZAK","370 W. TRIMBLE ROAD","SAN JOSE","CA","95131",,0,"3337A86601","C",712
104,"KATHERINE","MORESCHI","27 DRYDOCK AVE.","BOSTON","MA","02210",7/15/1994 0:00:00,0,"3414A21612","C",708
105,"MAUREEN","DEASY","P O BOX 2729","WARMINSTER","PA","18974",8/15/1994 0:00:00,0,"3316J62591","C",701
106,"JAMES","LEIDERMAN","325 GREENTREE ROAD","OAKS","PA","19456",7/28/1994 0:00:00,0,"3414A27618","C",705
107,"RICK","JOHNSON","40 WEST 20 STREET","NEW YORK","NY","10011",7/15/1994 0:00:00,0,"3414A13750","A",
108,"WILLIAM","ROHLFS","99 MAIN ST, PO BOX 385","STANHOPE","NJ","07874",5/30/1994 0:00:00,0,"3337A94979","C",721
109,"BOGDAN","CHARYTON","3331 STREET ROAD SUITE 455","BENSALEM","PA","19020",7/2/1994 0:00:00,0,"3414A14015","A",702
110,"PHILIP","SIEGAL","84 NORRISTOWN RD","BLUEBELL","PA","19422",6/15/1994 0:00:00,0,,"C",
111,"SANDRA","TAYLOR","P. O. BOX 339","BOWLING GREEN","VA","22427",2/9/1994 0:00:00,0,"3316J36042","C",705
112,"JOCHEN","HEIN","AM QUELLENRAIN 6","BAD SODEN-SALMUNST","DT","63628",8/11/1994 0:00:00,428,,"C",712
113,"JEFFREY","ELY","60 WOODLAWN STREET","WEST HARTFORD","CT","06133-2500",8/17/1994 0:00:00,0,"3414A43599","A",720
114,"VERONICA","LONGNECKER","PO BOX 1002","MILLERSVILLE","PA","17551",5/20/1994 0:00:00,0,"3414A07991","A",708
115,"TAMARA","COMPTON","P.O. BOX 580","FORT COLLINS","CO","80522",,0,,"C",706
116,"THORR","THOMAS","ONE MADISON AVENUE","NEW YORK","NY","10010-3690",2/15/1994 0:00:00,0,,"A",720
117,"STUART","OSNOW","1560 BROADWAY SUITE 711","NEW YORK","NY","10036-1525",8/11/1994 0:00:00,0,"3337A34012","A",712
118,"JOHN","STANKUS","11308 PICKFAIR DR","AUSTIN","TX","78750-2528",12/17/1993 0:00:00,0,"3377A25623","A",721
119,"DANIEL","CORTESE","94 GROVE ST.","SOMERVILLE","NJ","08876",5/6/1994 0:00:00,0,"3414A13543","A",712
120,"DEL","PRESLEY DIRECTOR","L.B. 8061 ROSENWALD BUILDING","STATESBORO","GA","30460",9/1/1994 0:00:00,0,"3414A08538","A",705
121,"JEFFERY","BATTERSBY","31 FIELDS LANE","NORTH SALEM","NY","10560",7/10/1994 0:00:00,0,"3414A43531","C",719
122,"STEVE","SETTEDUCATI","280 MIDLAND AVE","SADDLEBROOK","NJ","07662",3/1/1994 0:00:00,0,"3337A74096","A",712
123,"RONALD","PONUAL","293 32 1/2 ST.","GULFPORT","MS","39570",8/1/1994 0:00:00,0,"3316J72364","C",703
124,"SUSAN","LITTLEFIELD","4971 OAKLAND AVE","ST LOUIS","MO","63110",1/15/1994 0:00:00,0,,"C",704
125,"DAVID","GARNER","915 NORTH 9TH STREET","BISMARCK","ND","58501",8/6/1994 0:00:00,0,"3414A46972","A",711
126,"CRAIG","HUBBARD",,"NEW PORT RICHEY","FL","34652",6/19/1994 0:00:00,0,"3414A08289","C",701
127,"PEGGY","BATES","7665 COMMERCE WAY SUITE 50","EDEN PRAIRIE","MN","55344",4/15/1994 0:00:00,0,"3337A69168","A",707


TEST RESULT:
Get last ten nodes:
Lastname: TROMBLEY, Left depth: 3, Right depth: 4
Lastname: UMPOROWICZ, Left depth: 0, Right depth: 0
Lastname: UNDERWOOD, Left depth: 1, Right depth: 1
Lastname: VAN OSDELL, Left depth: 0, Right depth: 0
Lastname: WENNERSTEN, Left depth: 2, Right depth: 3
Lastname: WILLIAMS ESQ, Left depth: 0, Right depth: 1
Lastname: WILLIS, Left depth: 0, Right depth: 0
Lastname: WILSON, Left depth: 2, Right depth: 2
Lastname: WINTERFELD, Left depth: 0, Right depth: 0
Lastname: YALETCHKO, Left depth: 1, Right depth: 0

Search Lastname: TAYLOR
Recnum: 40, Name: ROBERT TAYLOR, Address: 317 ROSEBANK AVE, City: NASHVILLE, State: TN, Zip: 37206-1459, Date: 6/21/1994 0:00:00, Code1: 0, Code2: 3414A43542, Code3: A, Code4: 706
Recnum: 111, Name: SANDRA TAYLOR, Address: P. O. BOX 339, City: BOWLING GREEN, State: VA, Zip: 22427, Date: 2/9/1994 0:00:00, Code1: 0, Code2: 3316J36042, Code3: C, Code4: 705

Also generate a .dot file, which can be visualized by Graphviz.

digraph program5 {
"HUNTENBURG--factor:0" -> "ENGLER--factor:0";
"ENGLER--factor:0" -> "BOCK--factor:-1";
"BOCK--factor:-1" -> "BARNES--factor:-1";
"BARNES--factor:-1" -> "ALCALA--factor:0";
"ALCALA--factor:0" -> "ADAMS--factor:0";
"ALCALA--factor:0" -> "ASWAD--factor:0";
"BARNES--factor:-1" -> "BEATTY--factor:0";
"BEATTY--factor:0" -> "BATTERSBY--factor:1";
"BATTERSBY--factor:1" -> "BATES--factor:0";
"BEATTY--factor:0" -> "BEERY--factor:0";
"BEERY--factor:0" -> "BEEBE--factor:0";
"BEERY--factor:0" -> "BLACK--factor:0";
"BOCK--factor:-1" -> "CHU--factor:0";
"CHU--factor:0" -> "CABLE--factor:-1";
"CABLE--factor:-1" -> "BUDDAY--factor:1";
"BUDDAY--factor:1" -> "BRISCOE--factor:0";
"CABLE--factor:-1" -> "CANADA--factor:-1";
"CANADA--factor:-1" -> "CALDWELL--factor:0";
"CANADA--factor:-1" -> "CARTER-MATSAPOLA--factor:-1";
"CARTER-MATSAPOLA--factor:-1" -> "CHARYTON--factor:0";
"CHU--factor:0" -> "CUNNINGHAM--factor:0";
"CUNNINGHAM--factor:0" -> "COOK--factor:-1";
"COOK--factor:-1" -> "COMPTON--factor:0";
"COOK--factor:-1" -> "CROSS--factor:1";
"CROSS--factor:1" -> "CORTESE--factor:0";
"CUNNINGHAM--factor:0" -> "DEASY--factor:-1";
"DEASY--factor:-1" -> "DE DLERCQ--factor:0";
"DEASY--factor:-1" -> "EISENTIEDET--factor:-1";
"EISENTIEDET--factor:-1" -> "ELY--factor:0";
"ENGLER--factor:0" -> "HADSELL--factor:-1";
"HADSELL--factor:-1" -> "GREGERSON--factor:1";
"GREGERSON--factor:1" -> "FOUNTAIN--factor:0";
"FOUNTAIN--factor:0" -> "FLINT--factor:1";
"FLINT--factor:1" -> "FARNELL--factor:0";
"FOUNTAIN--factor:0" -> "GORDON--factor:0";
"GORDON--factor:0" -> "GARNER--factor:0";
"GORDON--factor:0" -> "GOTFRIED--factor:0";
"GREGERSON--factor:1" -> "GREGORY--factor:-1";
"GREGORY--factor:-1" -> "GRUBB--factor:0";
"HADSELL--factor:-1" -> "HEMMINGWAY--factor:-1";
"HEMMINGWAY--factor:-1" -> "HARRISON--factor:0";
"HARRISON--factor:0" -> "HANSELL--factor:0";
"HANSELL--factor:0" -> "HAMILTON--factor:0";
"HANSELL--factor:0" -> "HARISON--factor:0";
"HARRISON--factor:0" -> "HEIMANN--factor:-1";
"HEIMANN--factor:-1" -> "HEIN--factor:0";
"HEMMINGWAY--factor:-1" -> "HUBBERT--factor:1";
"HUBBERT--factor:1" -> "HIGGINS--factor:-1";
"HIGGINS--factor:-1" -> "HERF--factor:0";
"HIGGINS--factor:-1" -> "HORN--factor:-1";
"HORN--factor:-1" -> "HUBBARD--factor:0";
"HUBBERT--factor:1" -> "HUDSON--factor:-1";
"HUDSON--factor:-1" -> "HUNT44 JR--factor:0";
"HUNTENBURG--factor:0" -> "NYDEGGER--factor:0";
"NYDEGGER--factor:0" -> "KOLBERG--factor:-1";
"KOLBERG--factor:-1" -> "JOHNSON--factor:-1";
"JOHNSON--factor:-1" -> "JENSEN--factor:1";
"JENSEN--factor:1" -> "JACOBSEN--factor:0";
"JOHNSON--factor:-1" -> "KIKUCHI--factor:0";
"KIKUCHI--factor:0" -> "KATZ--factor:0";
"KATZ--factor:0" -> "JORDAN--factor:0";
"KATZ--factor:0" -> "KAUFFMAN--factor:0";
"KIKUCHI--factor:0" -> "KIMBALL--factor:-1";
"KIMBALL--factor:-1" -> "KINGSOLVER--factor:0";
"KOLBERG--factor:-1" -> "LONN--factor:0";
"LONN--factor:0" -> "LARSON--factor:-1";
"LARSON--factor:-1" -> "LABOUY--factor:-1";
"LABOUY--factor:-1" -> "LANGSTROM--factor:0";
"LARSON--factor:-1" -> "LEVY--factor:0";
"LEVY--factor:0" -> "LAUREY--factor:-1";
"LAUREY--factor:-1" -> "LEIDERMAN--factor:0";
"LEVY--factor:0" -> "LITTLEFIELD--factor:0";
"LITTLEFIELD--factor:0" -> "LINDEEN--factor:0";
"LITTLEFIELD--factor:0" -> "LONGNECKER--factor:0";
"LONN--factor:0" -> "MIERS--factor:-1";
"MIERS--factor:-1" -> "MARTINDALE--factor:0";
"MARTINDALE--factor:0" -> "MARTIN--factor:0";
"MARTINDALE--factor:0" -> "MCKELVY--factor:0";
"MIERS--factor:-1" -> "MOREROD--factor:0";
"MOREROD--factor:0" -> "MOLERIN--factor:1";
"MOLERIN--factor:1" -> "MILLER--factor:0";
"MOREROD--factor:0" -> "MORGAN--factor:0";
"MORGAN--factor:0" -> "MORESCHI--factor:0";
"MORGAN--factor:0" -> "MUEHLBAUER--factor:0";
"NYDEGGER--factor:0" -> "SMITH1--factor:0";
"SMITH1--factor:0" -> "ROLOFF--factor:0";
"ROLOFF--factor:0" -> "READ--factor:0";
"READ--factor:0" -> "PIDGEON--factor:0";
"PIDGEON--factor:0" -> "PARCHER--factor:0";
"PARCHER--factor:0" -> "OSNOW--factor:0";
"PARCHER--factor:0" -> "PARRISH--factor:0";
"PIDGEON--factor:0" -> "PRESLEY DIRECTOR--factor:0";
"PRESLEY DIRECTOR--factor:0" -> "PONUAL--factor:0";
"PRESLEY DIRECTOR--factor:0" -> "RAHBAN--factor:0";
"READ--factor:0" -> "RICE--factor:-1";
"RICE--factor:-1" -> "RHUYS--factor:0";
"RICE--factor:-1" -> "RITZERT--factor:-1";
"RITZERT--factor:-1" -> "ROHLFS--factor:0";
"ROLOFF--factor:0" -> "SCHREINER--factor:-1";
"SCHREINER--factor:-1" -> "ROZAK--factor:0";
"ROZAK--factor:0" -> "ROUSE--factor:0";
"ROZAK--factor:0" -> "SANZONE--factor:0";
"SCHREINER--factor:-1" -> "SIEGAL--factor:1";
"SIEGAL--factor:1" -> "SHEBELL--factor:1";
"SHEBELL--factor:1" -> "SETTEDUCATI--factor:0";
"SIEGAL--factor:1" -> "SLAUGHTER--factor:0";
"SMITH1--factor:0" -> "TROMBLEY--factor:-1";
"TROMBLEY--factor:-1" -> "SMITH3--factor:-1";
"SMITH3--factor:-1" -> "SMITH2--factor:0";
"SMITH3--factor:-1" -> "TAYLOR--factor:0";
"TAYLOR--factor:0" -> "STANKUS--factor:0";
"TAYLOR--factor:0" -> "THOMAS--factor:0";
"TROMBLEY--factor:-1" -> "WENNERSTEN--factor:-1";
"WENNERSTEN--factor:-1" -> "UNDERWOOD--factor:0";
"UNDERWOOD--factor:0" -> "UMPOROWICZ--factor:0";
"UNDERWOOD--factor:0" -> "VAN OSDELL--factor:0";
"WENNERSTEN--factor:-1" -> "WILSON--factor:0";
"WILSON--factor:0" -> "WILLIAMS ESQ--factor:-1";
"WILLIAMS ESQ--factor:-1" -> "WILLIS--factor:0";
"WILSON--factor:0" -> "YALETCHKO--factor:1";
"YALETCHKO--factor:1" -> "WINTERFELD--factor:0";
}

For contrast, there is also a .dot file that using BST without AVL tech.

digraph program5 {
"NYDEGGER--factor:0" -> "KOLBERG--factor:0";
"KOLBERG--factor:0" -> "ENGLER--factor:0";
"ENGLER--factor:0" -> "BOCK--factor:0";
"BOCK--factor:0" -> "BEERY--factor:1";
"BEERY--factor:1" -> "ALCALA--factor:-1";
"ALCALA--factor:-1" -> "ADAMS--factor:0";
"ALCALA--factor:-1" -> "BARNES--factor:-1";
"BARNES--factor:-1" -> "ASWAD--factor:0";
"BARNES--factor:-1" -> "BEATTY--factor:1";
"BEATTY--factor:1" -> "BATTERSBY--factor:1";
"BATTERSBY--factor:1" -> "BATES--factor:0";
"BEATTY--factor:1" -> "BEEBE--factor:0";
"BEERY--factor:1" -> "BLACK--factor:0";
"BOCK--factor:0" -> "BUDDAY--factor:-1";
"BUDDAY--factor:-1" -> "BRISCOE--factor:0";
"BUDDAY--factor:-1" -> "CABLE--factor:-2";
"CABLE--factor:-2" -> "COOK--factor:0";
"COOK--factor:0" -> "CHU--factor:1";
"CHU--factor:1" -> "CANADA--factor:-1";
"CANADA--factor:-1" -> "CALDWELL--factor:0";
"CANADA--factor:-1" -> "CARTER-MATSAPOLA--factor:-1";
"CARTER-MATSAPOLA--factor:-1" -> "CHARYTON--factor:0";
"CHU--factor:1" -> "COMPTON--factor:0";
"COOK--factor:0" -> "DE DLERCQ--factor:0";
"DE DLERCQ--factor:0" -> "CUNNINGHAM--factor:2";
"CUNNINGHAM--factor:2" -> "CROSS--factor:1";
"CROSS--factor:1" -> "CORTESE--factor:0";
"DE DLERCQ--factor:0" -> "EISENTIEDET--factor:0";
"EISENTIEDET--factor:0" -> "DEASY--factor:0";
"EISENTIEDET--factor:0" -> "ELY--factor:0";
"ENGLER--factor:0" -> "HUNTENBURG--factor:0";
"HUNTENBURG--factor:0" -> "HEMMINGWAY--factor:0";
"HEMMINGWAY--factor:0" -> "GREGERSON--factor:0";
"GREGERSON--factor:0" -> "FLINT--factor:-1";
"FLINT--factor:-1" -> "FARNELL--factor:0";
"FLINT--factor:-1" -> "FOUNTAIN--factor:-2";
"FOUNTAIN--factor:-2" -> "GOTFRIED--factor:2";
"GOTFRIED--factor:2" -> "GORDON--factor:1";
"GORDON--factor:1" -> "GARNER--factor:0";
"GREGERSON--factor:0" -> "HADSELL--factor:0";
"HADSELL--factor:0" -> "GREGORY--factor:-1";
"GREGORY--factor:-1" -> "GRUBB--factor:0";
"HADSELL--factor:0" -> "HARRISON--factor:0";
"HARRISON--factor:0" -> "HAMILTON--factor:-2";
"HAMILTON--factor:-2" -> "HARISON--factor:1";
"HARISON--factor:1" -> "HANSELL--factor:0";
"HARRISON--factor:0" -> "HEIMANN--factor:-1";
"HEIMANN--factor:-1" -> "HEIN--factor:0";
"HEMMINGWAY--factor:0" -> "HUDSON--factor:1";
"HUDSON--factor:1" -> "HERF--factor:-2";
"HERF--factor:-2" -> "HUBBERT--factor:2";
"HUBBERT--factor:2" -> "HORN--factor:0";
"HORN--factor:0" -> "HIGGINS--factor:0";
"HORN--factor:0" -> "HUBBARD--factor:0";
"HUDSON--factor:1" -> "HUNT44 JR--factor:0";
"HUNTENBURG--factor:0" -> "JENSEN--factor:-1";
"JENSEN--factor:-1" -> "JACOBSEN--factor:0";
"JENSEN--factor:-1" -> "KIKUCHI--factor:0";
"KIKUCHI--factor:0" -> "JOHNSON--factor:-2";
"JOHNSON--factor:-2" -> "KATZ--factor:0";
"KATZ--factor:0" -> "JORDAN--factor:0";
"KATZ--factor:0" -> "KAUFFMAN--factor:0";
"KIKUCHI--factor:0" -> "KIMBALL--factor:-1";
"KIMBALL--factor:-1" -> "KINGSOLVER--factor:0";
"KOLBERG--factor:0" -> "MARTINDALE--factor:0";
"MARTINDALE--factor:0" -> "LONN--factor:1";
"LONN--factor:1" -> "LAUREY--factor:0";
"LAUREY--factor:0" -> "LABOUY--factor:-2";
"LABOUY--factor:-2" -> "LARSON--factor:1";
"LARSON--factor:1" -> "LANGSTROM--factor:0";
"LAUREY--factor:0" -> "LEVY--factor:-1";
"LEVY--factor:-1" -> "LEIDERMAN--factor:0";
"LEVY--factor:-1" -> "LINDEEN--factor:-2";
"LINDEEN--factor:-2" -> "LONGNECKER--factor:1";
"LONGNECKER--factor:1" -> "LITTLEFIELD--factor:0";
"LONN--factor:1" -> "MARTIN--factor:0";
"MARTINDALE--factor:0" -> "MIERS--factor:-1";
"MIERS--factor:-1" -> "MCKELVY--factor:0";
"MIERS--factor:-1" -> "MOLERIN--factor:-1";
"MOLERIN--factor:-1" -> "MILLER--factor:0";
"MOLERIN--factor:-1" -> "MOREROD--factor:-2";
"MOREROD--factor:-2" -> "MORGAN--factor:0";
"MORGAN--factor:0" -> "MORESCHI--factor:0";
"MORGAN--factor:0" -> "MUEHLBAUER--factor:0";
"NYDEGGER--factor:0" -> "YALETCHKO--factor:2";
"YALETCHKO--factor:2" -> "ROLOFF--factor:0";
"ROLOFF--factor:0" -> "RICE--factor:0";
"RICE--factor:0" -> "RAHBAN--factor:0";
"RAHBAN--factor:0" -> "PARRISH--factor:0";
"PARRISH--factor:0" -> "PARCHER--factor:1";
"PARCHER--factor:1" -> "OSNOW--factor:0";
"PARRISH--factor:0" -> "PIDGEON--factor:-2";
"PIDGEON--factor:-2" -> "PRESLEY DIRECTOR--factor:1";
"PRESLEY DIRECTOR--factor:1" -> "PONUAL--factor:0";
"RAHBAN--factor:0" -> "READ--factor:-1";
"READ--factor:-1" -> "RHUYS--factor:0";
"RICE--factor:0" -> "RITZERT--factor:-1";
"RITZERT--factor:-1" -> "ROHLFS--factor:0";
"ROLOFF--factor:0" -> "WENNERSTEN--factor:0";
"WENNERSTEN--factor:0" -> "ROUSE--factor:-2";
"ROUSE--factor:-2" -> "SMITH1--factor:0";
"SMITH1--factor:0" -> "SLAUGHTER--factor:2";
"SLAUGHTER--factor:2" -> "SCHREINER--factor:0";
"SCHREINER--factor:0" -> "SANZONE--factor:1";
"SANZONE--factor:1" -> "ROZAK--factor:0";
"SCHREINER--factor:0" -> "SHEBELL--factor:0";
"SHEBELL--factor:0" -> "SETTEDUCATI--factor:0";
"SHEBELL--factor:0" -> "SIEGAL--factor:0";
"SMITH1--factor:0" -> "VAN OSDELL--factor:2";
"VAN OSDELL--factor:2" -> "TAYLOR--factor:0";
"TAYLOR--factor:0" -> "SMITH2--factor:-2";
"SMITH2--factor:-2" -> "SMITH3--factor:-1";
"SMITH3--factor:-1" -> "STANKUS--factor:0";
"TAYLOR--factor:0" -> "TROMBLEY--factor:-1";
"TROMBLEY--factor:-1" -> "THOMAS--factor:0";
"TROMBLEY--factor:-1" -> "UMPOROWICZ--factor:-1";
"UMPOROWICZ--factor:-1" -> "UNDERWOOD--factor:0";
"WENNERSTEN--factor:0" -> "WILLIAMS ESQ--factor:-2";
"WILLIAMS ESQ--factor:-2" -> "WILSON--factor:0";
"WILSON--factor:0" -> "WILLIS--factor:0";
"WILSON--factor:0" -> "WINTERFELD--factor:0";
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值