// AvlNode
//
// Author:
// Antonio J. Nebro <antonio@lcc.uma.es>
// Juan J. Durillo <durillo@lcc.uma.es>
//
// Copyright (c) 2011 Antonio J. Nebro, Juan J. Durillo
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
package jmetal.util.avl;
/**
* Created with IntelliJ IDEA.
* User: Antonio J. Nebro
* Date: 08/07/13
* Time: 15:46
* To change this template use File | Settings | File Templates.
*/
public class AvlNode<T> {
private AvlNode<T> left_ ;
private AvlNode<T> right_ ;
private AvlNode<T> parent_ ;
private int height_ ;
private AvlNode<T> closestNode_ ;
private T item_ ;
/**
* Constructor
* @param item_
*/
public AvlNode(T item_) {
this.left_ = null;
this.right_ = null;
this.parent_ = null;
height_ = 0 ;
closestNode_ = null ;
this.item_ = item_;
}
public AvlNode getLeft() {
return left_;
}
public void setLeft(AvlNode left) {
this.left_ = left;
}
public AvlNode getParent() {
return parent_;
}
public void setParent(AvlNode parent) {
this.parent_ = parent;
}
public AvlNode getRight() {
return right_;
}
public void setRight(AvlNode right) {
this.right_ = right;
}
public T getItem() {
return item_;
}
public void setItem(T item) {
this.item_ = item;
}
public int getHeight() {
return height_;
}
public void setHeight(int height) {
this.height_ = height;
}
public void updateHeight() {
if (!hasLeft() && !hasRight()) {
height_ = 0;
} else if (!hasRight()) {
height_ = 1 + getLeft().getHeight();
} else if (!hasLeft()) {
height_ = 1 + getRight().getHeight();
} else {
height_ = 1 + Math.max(getLeft().getHeight(), getRight().getHeight());
}
}
public AvlNode<T> getClosestNode() {
return closestNode_;
}
public void setClosestNode_(AvlNode<T> closestNode) {
this.closestNode_ = closestNode;
}
public boolean hasParent() {
return parent_ != null ;
}
public boolean hasLeft() {
return left_ != null ;
}
public boolean hasRight() {
return right_ != null ;
}
public boolean isLeaf() {
boolean result ;
if (!hasLeft() && !hasRight()) {
result = true ;
}
else
result = false ;
return result ;
}
public boolean hasOnlyALeftChild() {
boolean result ;
if (hasLeft() && !hasRight()) {
result = true ;
}
else
result = false ;
return result ;
}
public boolean hasOnlyARightChild() {
boolean result ;
if (hasRight() && !hasLeft()) {
result = true ;
}
else
result = false ;
return result ;
}
}