.......................................

Create a FamilyTree data structure. The FamilyTree is a structure of Nodes and has two roots. Do not be misled by the word "tree" this is not a tree according to the definition used in CS. It is somewhat like a linked list and somewhat like a tree. Famiry Tree implements the following interface public interface FamilyTree f public void add (Person self, Integer pl, Integer p2) public Set Node getAll); public Set getDescendants (int nodeNum); public List Person getParents(int id); public Person getPersonById(int id); public List getPersonsByName(String lastName, String firstName); public int size) Person implements Comparable and has Strings for first name and last name, an .equals) method, getters, setters, and at least one constructor. It also has two GregorianCalendar references for date of birth and date of death. Person's toString) should be carefully thought out to show this information, including the dates, in a clear way. I am intentionally leaving it to you to look up how to work with GregorianCalendar, which is not as straightforward as you might expect. Review the material on LinkedLists to recall how a Node relates to its data object. Node implements Comparable Node >, and also contains the following .a unique id number. I suggest you provide the id with an instance variable in your Family Tree implementation class that is incremented every time a Node is added to the tree. Important: I will use JUnit tests that assume the first node you add to your tree receives id 1, not 0 a reference to one Person, the data value for this Node. I suggest you name the variable "self . two references to parent Nodes, although one or both of these may be null if the parents are not in the tree . a list of child Nodes containing zero or more references to the Nodes representing Self's children. Always instantiate the list when the Node is created. any constructors, getters, setters, and other methods you find necessary .a toString) method that appends the node id in some clear way to the toString() from the Person the node represents (eg, "Node 1: Bob Smith") Create a FamilyTree data structure. The FamilyTree is a structure of Nodes and has two roots. Do not be misled by the word "tree" this is not a tree according to the definition used in CS. It is somewhat like a linked list and somewhat like a tree. Famiry Tree implements the following interface public interface FamilyTree f public void add (Person self, Integer pl, Integer p2) public Set Node getAll); public Set getDescendants (int nodeNum); public List Person getParents(int id); public Person getPersonById(int id); public List getPersonsByName(String lastName, String firstName); public int size) Person implements Comparable and has Strings for first name and last name, an .equals) method, getters, setters, and at least one constructor. It also has two GregorianCalendar references for date of birth and date of death. Person's toString) should be carefully thought out to show this information, including the dates, in a clear way. I am intentionally leaving it to you to look up how to work with GregorianCalendar, which is not as straightforward as you might expect. Review the material on LinkedLists to recall how a Node relates to its data object. Node implements Comparable Node >, and also contains the following .a unique id number. I suggest you provide the id with an instance variable in your Family Tree implementation class that is incremented every time a Node is added to the tree. Important: I will use JUnit tests that assume the first node you add to your tree receives id 1, not 0 a reference to one Person, the data value for this Node. I suggest you name the variable "self . two references to parent Nodes, although one or both of these may be null if the parents are not in the tree . a list of child Nodes containing zero or more references to the Nodes representing Self's children. Always instantiate the list when the Node is created. any constructors, getters, setters, and other methods you find necessary .a toString) method that appends the node id in some clear way to the toString() from the Person the node represents (eg, "Node 1: Bob Smith")