/// <summary>
 /// Is root node?
 /// </summary>
 /// <param name="node">Node to check</param>
 /// <returns>True if the node is a root node and reverse</returns>
 public static bool isRootNode(DecisionTreeNode node)
 {
     try
     {
         if (node == null)
             return false;
         return (node.NODE_ID == "0" && node.NODE_TYPE == (int) DecisionTreeNodeType.Model);
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
 }
 /// <summary>
 /// Is leaf node?
 /// </summary>
 /// <param name="node">Node to check</param>
 /// <returns>True if the node is a leaf node and reverse</returns>
 public static bool isLeafNode(DecisionTreeNode node)
 {
     try
     {
         if (node == null)
             return false;
         return (node.NODE_TYPE == (int) DecisionTreeNodeType.Distribution && node.CHILDREN_CARDINALITY == 0);
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
 }
 /// <summary>
 /// Get parent node
 /// </summary>
 /// <param name="node">The node you want to get its parent</param>
 /// <returns>The parent node</returns>
 public static DecisionTreeNode getParentNode(DecisionTreeNode node)
 {
     try
     {
         if (!isRootNode(node))
             return node.DecisionTreeNode_Parent;
         else
             return null;
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
 }
 /// <summary>
 /// Get child nodes
 /// </summary>
 /// <param name="node">The node you want to get its childs</param>
 /// <returns>Array of node childs</returns>
 public static DecisionTreeNode[] getChildNodes(DecisionTreeNode node)
 {
     try
     {
         if (!isLeafNode(node))
             return node.DecisionTreeNode_Childs.ToArray();
         else
             return null;
     }
     catch (Exception ex)
     {
         throw new Exception(ex.Message);
     }
 }
 public DecisionTreeAnalysisResult(NodeDescription NodeDescription, DecisionTreeNode Node)
 {
     _NodeDescription = NodeDescription;
     _Node = Node;
 }
 public NodeDescription(DecisionTreeNode node)
 {
     _NodeCaptions = new List<NodeCaption>();
     while (!DecisionTreeAnalysis.isRootNode(node.DecisionTreeNode_Parent))
     {
         _NodeCaptions.Add(new NodeCaption(node.NODE_CAPTION));
         node = node.DecisionTreeNode_Parent;
     }
 }