Tree Node

package com.thealgorithms.devutils.nodes;

/**
 * Base class for any tree node which holds a reference to the parent node.
 *
 * All known subclasses: {@link SimpleTreeNode}, {@link LargeTreeNode}.
 *
 * @param <E> The type of the data held in the Node.
 *
 * @author <a href="https://github.com/aitorfi">aitorfi</a>
 */
public abstract class TreeNode<E> extends Node<E> {

    /**
     * Refernce to the parent Node.
     */
    private TreeNode<E> parentNode;
    /**
     * Indicates the depth at which this node is in the tree.
     */
    private int depth;

    /**
     * Empty contructor.
     */
    public TreeNode() {
        super();
        depth = 0;
    }

    /**
     * Initializes the Nodes' data.
     *
     * @param data Value to which data will be initialized.
     * @see Node#Node(Object)
     */
    public TreeNode(E data) {
        super(data);
        depth = 0;
    }

    /**
     * Initializes the Nodes' data and parent node reference.
     *
     * @param data Value to which data will be initialized.
     * @param parentNode Value to which the nodes' parent reference will be set.
     */
    public TreeNode(E data, TreeNode<E> parentNode) {
        super(data);
        this.parentNode = parentNode;
        depth = this.parentNode.getDepth() + 1;
    }

    /**
     * @return True if the node is a leaf node, otherwise false.
     */
    public abstract boolean isLeafNode();

    /**
     * @return True if the node is the root node, otherwise false.
     */
    public boolean isRootNode() {
        return (parentNode == null);
    }

    public TreeNode<E> getParent() {
        return parentNode;
    }

    public void setParent(TreeNode<E> parentNode) {
        this.parentNode = parentNode;
        depth = this.parentNode.getDepth() + 1;
    }

    public int getDepth() {
        return depth;
    }
}
Algerlogo

Β© Alger 2022

About us

We are a group of programmers helping each other build new things, whether it be writing complex encryption programs, or simple ciphers. Our goal is to work together to document and model beautiful, helpful and interesting algorithms using code. We are an open-source community - anyone can contribute. We check each other's work, communicate and collaborate to solve problems. We strive to be welcoming, respectful, yet make sure that our code follows the latest programming guidelines.