Class BinaryTreeNode<D,N extends BinaryTreeNode<D,N>>
- java.lang.Object
-
- org.arakhne.afc.math.tree.node.AbstractParentlessTreeNode<D,N>
-
- org.arakhne.afc.math.tree.node.AbstractTreeNode<D,N>
-
- org.arakhne.afc.math.tree.node.BinaryTreeNode<D,N>
-
- Type Parameters:
D- is the type of the data inside the treeN- is the type of the tree nodes.
- All Implemented Interfaces:
Serializable,Comparable<N>,IterableNode<N>,TreeNode<D,N>,JsonableObject
- Direct Known Subclasses:
BinaryTreeNode.DefaultBinaryTreeNode,IcosepBinaryTreeNode
public abstract class BinaryTreeNode<D,N extends BinaryTreeNode<D,N>> extends AbstractTreeNode<D,N>
This is the generic implementation of a binary tree.moveTo
According to its definition inTreeNode.moveTo(TreeNode, int), the binary tree node implementation ofmoveToreplaces any existing node at the position given as parameter ofmoveTo..- Since:
- 13.0
- Version:
- 17.0 2020-01-04 14:41:41
- Author:
- Stéphane GALLAND
- See Also:
- Serialized Form
- Maven Group Id:
- org.arakhne.afc.core
- Maven Artifact Id:
- mathtree
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classBinaryTreeNode.BinaryTreeZoneThis is the generic implementation of a tree for which each node has two children.static classBinaryTreeNode.DefaultBinaryTreeNode<D>This is the generic implementation of a ternary tree.
-
Field Summary
-
Fields inherited from class org.arakhne.afc.math.tree.node.AbstractParentlessTreeNode
DEFAULT_COPY_USER_DATA, DEFAULT_LINK_LIST_USE, nodeListeners, notNullChildCount
-
-
Constructor Summary
Constructors Constructor Description BinaryTreeNode()Empty node.BinaryTreeNode(boolean useLinkedList)Construct node.BinaryTreeNode(boolean useLinkedList, boolean copyDataCollection, List<D> data)Construct node.BinaryTreeNode(boolean useLinkedList, D data)Construct node.BinaryTreeNode(D data)Construct node.BinaryTreeNode(Collection<D> data)Construct node.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()Clear the tree.NgetChildAt(int index)Replies the n-th child in this node.NgetChildAt(BinaryTreeNode.BinaryTreeZone index)Replies the child node at the specified position.intgetChildCount()Replies count of children in this node.voidgetChildren(Object[] array)Replies the child nodes of this node.protected voidgetHeights(int currentHeight, List<Integer> heights)Replies the heights of all the leaf nodes.NgetLeftChild()Set the left child of this node.intgetMaxHeight()Replies the maximal height of the tree.intgetMinHeight()Replies the minimal height of the tree.intgetNotNullChildCount()Replies count of not-null children in this node.Class<? extends Enum<?>>getPartitionEnumeration()Replies the enumeration type that is defining the children of the nodes.NgetRightChild()Set the right child of this node.intindexOf(N child)Replies the index of the specified child.booleanisLeaf()Replies if this node is a leaf.booleanmoveTo(N newParent, int index)Move this node in the given new node.booleanremoveChild(N child)Remove the specified node from this node if it is a child.booleansetChildAt(int index, N newChild)Set the n-th child in this node.booleansetChildAt(BinaryTreeNode.BinaryTreeZone zone, N newChild)Set the child for the specified zone.protected voidsetChildAtWithoutEventFiring(int index, N newChild)Invoked by the inner classes to set the child at the given index without firing the events.booleansetLeftChild(N newChild)Set the left child of this node.booleansetRightChild(N newChild)Set the right child of this node.-
Methods inherited from class org.arakhne.afc.math.tree.node.AbstractTreeNode
children, firePropertyChildAdded, firePropertyChildAdded, firePropertyChildRemoved, firePropertyChildRemoved, firePropertyParentChanged, firePropertyParentChanged, firePropertyParentChanged, getChildren, getDepth, getParentNode, isRoot, moveTo, removeDeeplyFromParent, removeFromParent, setParentNodeReference
-
Methods inherited from class org.arakhne.afc.math.tree.node.AbstractParentlessTreeNode
addTreeNodeListener, addUserData, addUserData, addUserData, addUserData, compareTo, firePropertyDataChanged, firePropertyDataChanged, firePropertyDataChanged, getAllUserData, getAllUserData, getDeepNodeCount, getDeepUserDataCount, getHeights, getInternalDataStructureForUserData, getUserData, getUserDataAt, getUserDataCount, isEmpty, isValid, removeAllUserData, removeTreeNodeListener, removeUserData, removeUserData, removeUserData, setUserData, setUserData, setUserDataAt, toJson, toN, toString
-
-
-
-
Constructor Detail
-
BinaryTreeNode
public BinaryTreeNode()
Empty node.
-
BinaryTreeNode
public BinaryTreeNode(Collection<D> data)
Construct node.- Parameters:
data- are the initial data.
-
BinaryTreeNode
public BinaryTreeNode(D data)
Construct node.- Parameters:
data- are the initial data.
-
BinaryTreeNode
public BinaryTreeNode(boolean useLinkedList)
Construct node.- Parameters:
useLinkedList- indicates if a linked list must be used to store the data. Iffalse, an ArrayList will be used.
-
BinaryTreeNode
public BinaryTreeNode(boolean useLinkedList, boolean copyDataCollection, List<D> data)Construct node.- Parameters:
useLinkedList- indicates if a linked list must be used to store the data. Iffalse, an ArrayList will be used.copyDataCollection- indicates if the given data collection is copied iftrueor the inner data collection will be the given collection itself iffalse.data- are the initial data.
-
BinaryTreeNode
public BinaryTreeNode(boolean useLinkedList, D data)Construct node.- Parameters:
useLinkedList- indicates if a linked list must be used to store the data. Iffalse, an ArrayList will be used.data- are the initial data.
-
-
Method Detail
-
getPartitionEnumeration
@Pure public Class<? extends Enum<?>> getPartitionEnumeration()
Description copied from interface:TreeNodeReplies the enumeration type that is defining the children of the nodes.- Returns:
- the enumeration type of the child partition,
or
nullif no such enumeration type is defined.
-
clear
public void clear()
Clear the tree.Caution: this method also destroyes the links between the child nodes inside the tree. If you want to unlink the first-level child node with this node but leave the rest of the tree unchanged, please call
setChildAt(i,null).
-
getChildCount
@Pure public int getChildCount()
Description copied from interface:IterableNodeReplies count of children in this node.The number of children is greater or equal to the value replied by
IterableNode.getNotNullChildCount().- Returns:
- the count of children.
- See Also:
IterableNode.getNotNullChildCount()
-
getNotNullChildCount
@Pure public int getNotNullChildCount()
Description copied from interface:IterableNodeReplies count of not-null children in this node.The number of not-null children is lower or equal to the value replied by
IterableNode.getChildCount().- Returns:
- the count of not-null children.
- See Also:
IterableNode.getChildCount()
-
getChildAt
@Pure public N getChildAt(int index) throws IndexOutOfBoundsException
Description copied from interface:IterableNodeReplies the n-th child in this node.- Parameters:
index- is the index of the child to reply- Returns:
- the child node.
- Throws:
IndexOutOfBoundsException- if the given index was invalid
-
getChildAt
@Pure public final N getChildAt(BinaryTreeNode.BinaryTreeZone index)
Replies the child node at the specified position.- Parameters:
index- is the position of the child to reply.- Returns:
- the child or
null
-
setLeftChild
public boolean setLeftChild(N newChild)
Set the left child of this node.- Parameters:
newChild- is the new left child- Returns:
trueon success, otherwisefalse
-
getLeftChild
@Pure public final N getLeftChild()
Set the left child of this node.- Returns:
- the left child or
nullif it does not exist
-
setRightChild
public boolean setRightChild(N newChild)
Set the right child of this node.- Parameters:
newChild- is the new left child- Returns:
trueon success, otherwisefalse
-
getRightChild
@Pure public final N getRightChild()
Set the right child of this node.- Returns:
- the right child or
nullif it does not exist
-
isLeaf
@Pure public boolean isLeaf()
Description copied from interface:IterableNodeReplies if this node is a leaf.- Returns:
trueis this node is a leaf, otherwisefalse
-
setChildAt
public boolean setChildAt(int index, N newChild) throws IndexOutOfBoundsExceptionDescription copied from interface:TreeNodeSet the n-th child in this node.- Specified by:
setChildAtin interfaceTreeNode<D,N extends BinaryTreeNode<D,N>>- Specified by:
setChildAtin classAbstractTreeNode<D,N extends BinaryTreeNode<D,N>>- Parameters:
index- is the index of the child to replynewChild- is the new child node.- Returns:
trueif it was set, otherwisefalse- Throws:
IndexOutOfBoundsException- if the given index was invalid
-
setChildAt
public final boolean setChildAt(BinaryTreeNode.BinaryTreeZone zone, N newChild)
Set the child for the specified zone.- Parameters:
zone- is the zone to setnewChild- is the child to insert- Returns:
trueif the child was added, otherwisefalse
-
setChildAtWithoutEventFiring
protected void setChildAtWithoutEventFiring(int index, N newChild) throws IndexOutOfBoundsExceptionDescription copied from class:AbstractTreeNodeInvoked by the inner classes to set the child at the given index without firing the events. This function should never invokeAbstractTreeNode.setParentNodeReference(AbstractTreeNode, boolean).- Specified by:
setChildAtWithoutEventFiringin classAbstractTreeNode<D,N extends BinaryTreeNode<D,N>>- Parameters:
index- is the position of the new child.newChild- is the new child- Throws:
IndexOutOfBoundsException- if the index is invalid.
-
moveTo
public boolean moveTo(N newParent, int index)
Description copied from interface:TreeNodeMove this node in the given new node.If any child node is already present at the given position in the new parent node, the tree node may replace the existing node or insert the moving node according to its implementation.
This function is preferred to a sequence of calls to
IterableNode.removeFromParent()andTreeNode.setChildAt(int, TreeNode)because it fires a limited set of events dedicated to the move the node.- Parameters:
newParent- is the new parent for this node.index- is the position of this node in the new parent.- Returns:
trueon success, otherwisefalse.
-
removeChild
public boolean removeChild(N child)
Description copied from interface:TreeNodeRemove the specified node from this node if it is a child.- Parameters:
child- is the child to remove.- Returns:
trueif the node was removed, otherwisefalse
-
indexOf
@Pure public int indexOf(N child)
Description copied from interface:TreeNodeReplies the index of the specified child.- Parameters:
child- is the node to search for.- Returns:
- the index or
-1.
-
getChildren
public void getChildren(Object[] array)
Description copied from interface:TreeNodeReplies the child nodes of this node.This function may put
nullin the array cells if the current tree node has not a child at the corresponding index.- Parameters:
array- is the array to fill.- See Also:
TreeNode.getChildren(Class),TreeNode.children()
-
getMinHeight
@Pure public int getMinHeight()
Description copied from interface:TreeNodeReplies the minimal height of the tree.- Returns:
- the height of the uppest leaf in the tree.
-
getMaxHeight
@Pure public int getMaxHeight()
Description copied from interface:TreeNodeReplies the maximal height of the tree.- Returns:
- the height of the lowest leaf in the tree.
-
getHeights
protected void getHeights(int currentHeight, List<Integer> heights)Replies the heights of all the leaf nodes. The order of the heights is given by a depth-first iteration.- Specified by:
getHeightsin classAbstractParentlessTreeNode<D,N extends BinaryTreeNode<D,N>>- Parameters:
currentHeight- is the current height of this node.heights- is the list of heights to fill
-
-