class_docstr: Continuous interval tree (CIT) vector classifier (aka Time Series Tree).
  
  The `Time Series Tree` described in the Time Series Forest (TSF) paper Deng et al
  (2013) [1]. A simple information gain based tree for continuous attributes using a
  bespoke margin gain metric for tie breaking.
  
  Implemented as a bade classifier for interval based time series classifiers such as
  `CanonicalIntervalForest` and `DrCIF`.
  
  Parameters
  ----------
  max_depth : int, default=sys.maxsize
      Maximum depth for the tree.
  thresholds : int, default=20
      Number of thresholds to split continuous attributes on at tree nodes.
  random_state : int, RandomState instance or None, default=None
      If `int`, random_state is the seed used by the random number generator;
      If `RandomState` instance, random_state is the random number generator;
      If `None`, the random number generator is the `RandomState` instance used
      by `np.random`.
  
  Attributes
  ----------
  classes_ : list
      The unique class labels in the training set.
  n_classes_ : int
      The number of unique classes in the training set.
  n_instances_ : int
      The number of train cases in the training set.
  n_atts_ : int
      The number of attributes in the training set.
  
  See Also
  --------
  CanonicalIntervalForest
  DrCIF
  
  Notes
  -----
  For the Java version, see
  `tsml <https://github.com/uea-machine-learning/tsml/blob/master/src/main/java/
  machine_learning/classifiers/ContinuousIntervalTree.java>`_.
  
  References
  ----------
  .. [1] H.Deng, G.Runger, E.Tuv and M.Vladimir, "A time series forest for
     classification and feature extraction",Information Sciences, 239, 2013
  
  Examples
  --------
  >>> from sktime.classification.sklearn import ContinuousIntervalTree
  >>> from sktime.datasets import load_unit_test
  >>> from sktime.datatypes._panel._convert import from_nested_to_3d_numpy
  >>> X_train, y_train = load_unit_test(split="train", return_X_y=True)
  >>> X_test, y_test = load_unit_test(split="test", return_X_y=True)
  >>> X_train = from_nested_to_3d_numpy(X_train)
  >>> X_test = from_nested_to_3d_numpy(X_test)
  >>> clf = ContinuousIntervalTree()
  >>> clf.fit(X_train, y_train)
  ContinuousIntervalTree(...)
  >>> y_pred = clf.predict(X_test)
docstr: Recursively find the split and information gain for each tree node.
docstr_tok: ["Recursively","find","the","split","and","information","gain","for","each","tree","node","."]
code: def tree_node_splits_and_gain(self):
      """Recursively find the split and information gain for each tree node."""
      splits = []
      gains = []
  
      if self._root.best_split > -1:
          self._find_splits_gain(self._root, splits, gains)
  
      return splits, gains
  
imports: import sys
  import numpy
  from sklearn import preprocessing
  from sklearn.base import BaseEstimator
  from sklearn.utils import check_random_state
  from sktime.exceptions import NotFittedError
label_desc: Use image node_id 7 for calling the ContinuousIntervalTree obj's underlying member method code with example usage: obj.tree_node_splits_and_gain() and returns: splits,  gains