Ejemplo n.º 1
0
        /// <summary>
        /// Tests the tree if can be connected.
        /// </summary>
        /// <param name="NodeToWhichWeConnectsTheTreeValue">The node to which we connects the tree value.</param>
        /// <param name="NodeToWhichWeConnectsTheTreeConnectorNumer">The node to which we connects the tree connector numer.</param>
        /// <param name="TreeToBeConnected">The tree to be connected.</param>
        /// <param name="TreeToBeConnectedConnectorNumer">The tree to be connected connector numer.</param>
        /// <returns></returns>
        public bool TestTreeIfCanBeConnected(T NodeToWhichWeConnectsTheTreeValue, int NodeToWhichWeConnectsTheTreeConnectorNumer, SortedTree <T> TreeToBeConnected, int TreeToBeConnectedConnectorNumer)
        {
            SortedTreeNode NodeToWhichWeConnects = GetNode(NodeToWhichWeConnectsTheTreeValue);

            if (NodeToWhichWeConnects == null)
            {
                return(false);
            }
            if (NodeToWhichWeConnects.GetChildNodes().ContainsKey(NodeToWhichWeConnectsTheTreeConnectorNumer))
            {
                return(false);
            }
            if (TreeToBeConnected.GetRoots().Count > 1)
            {
                return(false);
            }
            foreach (T nodevalue in TreeToBeConnected)
            {
                if (GetNode(nodevalue) != null)
                {
                    return(false);
                }
            }
            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the subtree from node.
        /// </summary>
        /// <param name="StartValue">The start value.</param>
        public SortedTree <T> GetSubtreeFromNode(T StartValue)
        {
            SortedTree <T> TreeToBeReturned = (SortedTree <T>)((ICloneable)this).Clone();

            TreeToBeReturned.MoveNodeToRoots(StartValue);
            // no we have to remove other roots
            int idx = 0;
            SortedTreeNodeList nodelist = TreeToBeReturned.GetRoots();

            while (nodelist.Count > 1)
            {
                if (!nodelist[idx].Value.Equals(StartValue))
                {
                    TreeToBeReturned.RemoveValue(nodelist[idx].Value, false);
                }
                else
                {
                    idx++;
                }
                nodelist = TreeToBeReturned.GetRoots();
            }
            return(TreeToBeReturned);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Connects the tree to the node.
        /// </summary>
        /// <param name="NodeToWhichWeConnectsTheTreeValue">The node to which we connects the tree value.</param>
        /// <param name="NodeToWhichWeConnectsTheTreeConnectorNumer">The node to which we connects the tree connector numer.</param>
        /// <param name="TreeToBeConnected">The tree to be connected.</param>
        /// <param name="TreeToBeConnectedConnectorNumer">The tree to be connected connector numer.</param>
        public void ConnectTheTreeToTheNode(T NodeToWhichWeConnectsTheTreeValue, int NodeToWhichWeConnectsTheTreeConnectorNumer, SortedTree <T> TreeToBeConnected, int TreeToBeConnectedConnectorNumer)
        {
            //sprawdzamy czy polaczenie moze nastapic
            if (!TestTreeIfCanBeConnected(NodeToWhichWeConnectsTheTreeValue, NodeToWhichWeConnectsTheTreeConnectorNumer, TreeToBeConnected, TreeToBeConnectedConnectorNumer))
            {
                throw new SortedTreeNodeException("Cannot connect such tree");
            }
            //wyszukujemy node do ktorego chcemy podlaczyc drzewo
            SortedTreeNode NodeToWhichWeConnectsTheTree = GetNode(NodeToWhichWeConnectsTheTreeValue);

            if (NodeToWhichWeConnectsTheTree == null)
            {
                throw new SortedTreeNodeException("Cannot find parent node");
            }
            //klonujemy drzewo ktore dolaczamy aby uniknac ew. zmian w tym drzewie (chcemy miec pewnosc ze ktos zmieniajac oryginal to drzewo (this) pozostanie nie zmienione)
            SortedTree <T> clonnedtree = (SortedTree <T>)((ICloneable)TreeToBeConnected).Clone();

            clonnedtree.SetParentTree(this);
            NodeToWhichWeConnectsTheTree.AddNode(clonnedtree.GetRoots()[0], NodeToWhichWeConnectsTheTreeConnectorNumer, TreeToBeConnectedConnectorNumer);
            ParentCleanup();
        }