示例#1
0
 /// <summary>
 /// Adds the specified list.
 /// </summary>
 /// <param name="list">The list.</param>
 public void Add(SortedTreeNodeList list)
 {
     foreach (SortedTreeNode node in list)
     {
         Add(node);
     }
 }
示例#2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SortedTree{SortedTreeNodeList}"/> class.
 /// </summary>
 /// <param name="list">The list.</param>
 public SortedTreeNodeList(SortedTreeNodeList list)
     : base(list.Count)
 {
     foreach (SortedTreeNode node in list)
     {
         Add(node);
     }
 }
示例#3
0
        /// <summary>
        /// Gets the nodes from level.
        /// </summary>
        /// <param name="level">The level.</param>
        /// <returns></returns>
        public SortedTreeNodeList GetNodesFromLevel(int level)
        {
            MarkAllUnvisited();
            SortedTreeNodeList nodestobereturned = new SortedTreeNodeList();

            foreach (SortedTreeNode node in m_Roots)
            {
                nodestobereturned.Add(node.GetNodesFromLevel(level));
            }
            return(nodestobereturned);
        }
示例#4
0
            /// <summary>
            /// Gets the nodes from level.
            /// </summary>
            /// <param name="level">The level.</param>
            /// <returns></returns>
            public SortedTreeNodeList GetNodesFromLevel(int level)
            {
                SortedTreeNodeList nodestobereturned = new SortedTreeNodeList();

                if (!Visited && level > 0)
                {
                    Visited = true;
                    if (Height == level)
                    {
                        nodestobereturned.Add(this);
                    }
                    else
                    {
                        //zakladamy ze pewien element nie moze miec siebie samego jako dziecka
                        foreach (KeyValuePair <int, SortedTreeNode> KVPNode in mChildNodes)
                        {
                            nodestobereturned.Add(KVPNode.Value.GetNodesFromLevel(level));
                        }
                    }
                }
                return(nodestobereturned);
            }
示例#5
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);
        }
示例#6
0
        /// <summary>
        /// Creates a new object that is a copy of the current instance.
        /// </summary>
        /// <returns>
        /// A new object that is a copy of this instance.
        /// </returns>
        object ICloneable.Clone()
        {
            SortedTree <T> newtree = new SortedTree <T>();

            SortedTreeNodeList currentelementlist   = null; // lista elementow z aktualnej warstwy
            SortedTreeNodeList nextlevelelementlist = null; // lista elementow z nastepnej warstwy

            // kopiujemy najpierw roots elements
            currentelementlist = new SortedTree <T> .SortedTreeNodeList(m_Roots);

            //a teraz w petli
            while (currentelementlist.Count > 0)
            {
                nextlevelelementlist = new SortedTree <T> .SortedTreeNodeList();

                foreach (SortedTreeNode node in currentelementlist)
                {
                    nextlevelelementlist.Add(node.GetChildNodes());
                    node.AddThisNodeToAnotherTree(ref newtree);
                }
                currentelementlist = new SortedTree <T> .SortedTreeNodeList(nextlevelelementlist);
            }
            return(newtree);
        }
示例#7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SortedTree{T}"/> class.
 /// </summary>
 public SortedTree()
 {
     m_Roots = new SortedTreeNodeList();
 }