4 package uk.ac.vamsas.objects.utils.trees;
\r
6 import uk.ac.vamsas.client.Vobject;
\r
7 import uk.ac.vamsas.client.VorbaId;
\r
9 public class BinaryNode {
\r
20 /** bootstrap is non-negative integer */
\r
21 public int bootstrap=-1;
\r
24 * Creates a new BinaryNode object.
\r
26 public BinaryNode() {
\r
27 left = right = parent = null;
\r
32 * Creates a new BinaryNode object.
\r
41 public BinaryNode(Vobject val, BinaryNode parent, String name) {
\r
43 this.parent = parent;
\r
46 left = right = null;
\r
52 * @return DOCUMENT ME!
\r
54 public Vobject element() {
\r
64 * @return DOCUMENT ME!
\r
66 public Vobject setElement(Vobject v) {
\r
73 * @return DOCUMENT ME!
\r
75 public BinaryNode left() {
\r
85 * @return DOCUMENT ME!
\r
87 public BinaryNode setLeft(BinaryNode n) {
\r
94 * @return DOCUMENT ME!
\r
96 public BinaryNode right() {
\r
106 * @return DOCUMENT ME!
\r
108 public BinaryNode setRight(BinaryNode n) {
\r
115 * @return DOCUMENT ME!
\r
117 public BinaryNode parent() {
\r
127 * @return DOCUMENT ME!
\r
129 public BinaryNode setParent(BinaryNode n) {
\r
136 * @return DOCUMENT ME!
\r
138 public boolean isLeaf() {
\r
139 return (left == null) && (right == null);
\r
143 * attaches FIRST and SECOND node arguments as the LEFT and RIGHT children
\r
144 * of this node (removing any old references) a null parameter DOES NOT mean
\r
145 * that the pointer to the corresponding child node is set to NULL - you
\r
146 * should use setChild(null), or detach() for this.
\r
149 public void SetChildren(BinaryNode leftchild, BinaryNode rightchild) {
\r
150 if (leftchild != null) {
\r
151 this.setLeft(leftchild);
\r
152 leftchild.detach();
\r
153 leftchild.setParent(this);
\r
156 if (rightchild != null) {
\r
157 this.setRight(rightchild);
\r
158 rightchild.detach();
\r
159 rightchild.setParent(this);
\r
164 * Detaches the node from the binary tree, along with all its child nodes.
\r
166 * @return BinaryNode The detached node.
\r
168 public BinaryNode detach() {
\r
169 if (this.parent != null) {
\r
170 if (this.parent.left == this) {
\r
171 this.parent.left = null;
\r
173 if (this.parent.right == this) {
\r
174 this.parent.right = null;
\r
179 this.parent = null;
\r
185 * Traverses up through the tree until a node with a free leftchild is
\r
188 * @return BinaryNode
\r
190 public BinaryNode ascendLeft() {
\r
191 BinaryNode c = this;
\r
195 } while ((c != null) && (c.left() != null) && !c.left().isLeaf());
\r
201 * Traverses up through the tree until a node with a free rightchild is
\r
202 * discovered. Jalview builds trees by descent on the left, so this may be
\r
205 * @return BinaryNode
\r
207 public BinaryNode ascendRight() {
\r
208 BinaryNode c = this;
\r
212 } while ((c != null) && (c.right() != null) && !c.right().isLeaf());
\r
223 public void setName(String name) {
\r
230 * @return DOCUMENT ME!
\r
232 public String getName() {
\r
242 public void setBootstrap(int boot) {
\r
243 this.bootstrap = boot;
\r
249 * @return DOCUMENT ME!
\r
251 public int getBootstrap() {
\r
256 * @return unquoted string of form VorbaId|v|node name string
\r
257 public String getNewickNodeName() {
\r
258 if (element!=null || name!=null)
\r
260 return ((element!=null) ? element.getVorbaId().getId()+"|v|" : "")
\r
261 + ((name == null) ? "" : name);
\r
266 * note we probably don't need this now
\r
268 * public boolean parseNodeNameString(uk.ac.vamsas.client.ClientDocument binder)
\r
271 if (element==null && name!=null && name.indexOf("|v|")>-1)
\r
273 element = binder.getObject(null).getVorbaId(); // TODO: fix THIS ! name.substring(0, name.indexOf("|v")));
\r