Ejemplo n.º 1
0
        //ASC ORDER
        private void __NodesVals(Node <T> n, ref CSharpDataStructures.Structures.Lists.LinkedList <T> L)
        {
            TwoThreeNode <T> np = n as TwoThreeNode <T>;

            if (np.FirstSon == null)
            {
                L.Add(np.Value);
            }
        }
Ejemplo n.º 2
0
        public SortedLinkedList <T> DifferenceList(TwoThreeTree <T> B)
        {
            ITree <T> T2 = (ITree <T>)B;

            CSharpDataStructures.Structures.Lists.LinkedList <T> C = new CSharpDataStructures.Structures.Lists.LinkedList <T>();

            LinkedStack <T> S1 = new LinkedStack <T>();//CHECK FOR S = Stack<T>
            LinkedStack <T> S2 = new LinkedStack <T>();

            this._visitor.PostOrder(this, (n) => __NodesVals(n, ref S1));//POST ORDER (INORDER)
            this._visitor.PostOrder(T2, (n) => __NodesVals(n, ref S2));
            bool flag = true;

            while (!S1.IsEmpty())
            {
                if (flag && S2.IsEmpty())
                {
                    flag = false;
                }
                if (flag && _comp.Compare(S1.Top(), S2.Top()) == 0)
                {
                    S1.Pop();
                    S2.Pop();
                }
                else if (flag && _comp.Compare(S1.Top(), S2.Top()) > 0)
                {
                    C.Add(S1.Top());
                    S1.Pop();
                }
                else
                {
                    if (flag)
                    {
                        S2.Pop();
                    }
                    else
                    {
                        C.Add(S1.Top());
                        S1.Pop();
                    }
                }
            }

            return(new SortedLinkedList <T>((IEnumerable <T>)C, _comp));
        }
Ejemplo n.º 3
0
        public SortedLinkedList <T> UnionList(TwoThreeTree <T> B)
        {
            ITree <T> T2 = (ITree <T>)B;

            CSharpDataStructures.Structures.Lists.LinkedList <T> C = new CSharpDataStructures.Structures.Lists.LinkedList <T>();

            LinkedStack <T> S1 = new LinkedStack <T>();//CHECK FOR S = Stack<T>
            LinkedStack <T> S2 = new LinkedStack <T>();

            this._visitor.PostOrder(this, (n) => __NodesVals(n, ref S1));//POST ORDER (INORDER)
            this._visitor.PostOrder(T2, (n) => __NodesVals(n, ref S2));
            while (!S1.IsEmpty())
            {
                C.Add(S1.Top());
                S1.Pop();
            }
            while (!S2.IsEmpty())
            {
                C.Add(S2.Top());
                S2.Pop();
            }
            return(new SortedLinkedList <T>((IEnumerable <T>)C, _comp));
        }
Ejemplo n.º 4
0
        //RETURNS SortedLinkedList<T> INSTEAD OF 2-3 TREE
        public SortedLinkedList <T> IntersectionList(TwoThreeTree <T> B)
        {
            if (B == null || B.Count == 0)
            {
                return(new SortedLinkedList <T>(_comp));
            }
            ITree <T> T2 = (ITree <T>)B;


            CSharpDataStructures.Structures.Lists.LinkedList <T> C = new CSharpDataStructures.Structures.Lists.LinkedList <T>();

            LinkedStack <T> S1 = new LinkedStack <T>();//CHECK FOR S = Stack<T>
            LinkedStack <T> S2 = new LinkedStack <T>();

            this._visitor.PostOrder(this, (n) => __NodesVals(n, ref S1));//POST ORDER ()
            this._visitor.PostOrder(T2, (n) => __NodesVals(n, ref S2));
            while (!S1.IsEmpty() && !S2.IsEmpty())
            {
                if (_comp.Compare(S1.Top(), S2.Top()) == 0)
                {
                    C.Add(S1.Top());
                    S1.Pop();
                    S2.Pop();
                }
                else if (_comp.Compare(S1.Top(), S2.Top()) < 0)
                {
                    S2.Pop();
                }
                else
                {
                    S1.Pop();
                }
            }

            return(new SortedLinkedList <T>((IEnumerable <T>)C, _comp));
        }
Ejemplo n.º 5
0
 public IEnumerator <T> GetEnumerator()
 {
     CSharpDataStructures.Structures.Lists.LinkedList <T> L = new CSharpDataStructures.Structures.Lists.LinkedList <T>();
     this._visitor.PostOrder(this, (n) => __NodesVals(n, ref L));//POST ORDER (LEAVES WILL BE ADDED)
     return(L.GetEnumerator());
 }
Ejemplo n.º 6
0
 public void CopyTo(T[] array, Int32 arrayIndex)
 {
     CSharpDataStructures.Structures.Lists.LinkedList <T> L = new CSharpDataStructures.Structures.Lists.LinkedList <T>();
     this._visitor.PostOrder(this, (n) => __NodesVals(n, ref L));
     L.CopyTo(array, arrayIndex);
 }
Ejemplo n.º 7
0
 //O(N)
 public SortedLinkedList <T> ToSortedList()
 {
     CSharpDataStructures.Structures.Lists.LinkedList <T> L = new CSharpDataStructures.Structures.Lists.LinkedList <T>();
     this._visitor.InOrder(this, (n) => __Nodes(n, ref L));//SYMMETRIC ORDER (INORDER)
     return(new SortedLinkedList <T>((IEnumerable <T>)L, _comp));
 }
Ejemplo n.º 8
0
 public IEnumerator <T> GetEnumerator()
 {
     CSharpDataStructures.Structures.Lists.LinkedList <T> L = new CSharpDataStructures.Structures.Lists.LinkedList <T>();
     this._visitor.InOrder(this, (n) => __Nodes(n, ref L));//SYMMETRIC ORDER (INORDER)
     return(L.GetEnumerator());
 }
Ejemplo n.º 9
0
 public void CopyTo(T[] array, Int32 arrayIndex)
 {
     CSharpDataStructures.Structures.Lists.LinkedList <T> L = new CSharpDataStructures.Structures.Lists.LinkedList <T>();
     this._visitor.InOrder(this, (n) => __Nodes(n, ref L));//SYMMETRIC ORDER (INORDER)
     L.CopyTo(array, arrayIndex);
 }
Ejemplo n.º 10
0
 //ASC ORDER
 private void __Nodes(Node <T> a, ref CSharpDataStructures.Structures.Lists.LinkedList <T> L)
 {
     L.Add(a.Value);
 }