001/*
002 * Copyright (c) 2015-2020, Oracle and/or its affiliates. All rights reserved.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017package org.tribuo.common.tree;
018
019import org.tribuo.Output;
020import org.tribuo.math.la.SparseVector;
021
022import java.io.Serializable;
023
024/**
025 * A node in a decision tree.
026 */
027public interface Node<T extends Output<T>> extends Serializable {
028
029    /**
030     * Is it a leaf node?
031     * @return True if it's a leaf node.
032     */
033    public boolean isLeaf();
034
035    /**
036     * Returns the next node in the tree based on the supplied example, or null if it's a leaf.
037     * @param example The example.
038     * @return The next node down in the tree.
039     */
040    public Node<T> getNextNode(SparseVector example);
041
042    /**
043     * The impurity score of this node.
044     * @return The node impurity.
045     */
046    public double getImpurity();
047
048    /**
049     * Copies the node and it's children.
050     * @return A deep copy.
051     */
052    public Node<T> copy();
053
054}