//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); } }
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)); }
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)); }
//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)); }
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()); }
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); }
//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)); }
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()); }
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); }
//ASC ORDER private void __Nodes(Node <T> a, ref CSharpDataStructures.Structures.Lists.LinkedList <T> L) { L.Add(a.Value); }