public override FTree <T> App2(List <T> ts, FTree <T> rightFT) { if (!(rightFT is DeepFTree <T>)) { FTree <T> resultFT = this; foreach (T t in ts) { resultFT = resultFT.Push_Back(t); } return((rightFT is EmptyFTree <T>) ? resultFT : resultFT.Push_Back(rightFT.LeftView().head)); } else // the right tree is also a deep tree { DeepFTree <T> deepRight = rightFT as DeepFTree <T>; List <T> cmbList = new List <T>(backDig.digNodes); cmbList.AddRange(ts); cmbList.AddRange(deepRight.frontDig.digNodes); FTree <T> resultFT = new DeepFTree <T> (frontDig, innerFT.App2(FTree <T> .ListOfNodes(cmbList), deepRight.innerFT), deepRight.backDig ); return(resultFT); } }
public override FTree <T> Push_Back(T t) { int cntbackDig = backDig.digNodes.Count; if (backDig.digNodes.Count == 4) { List <T> newBack = new List <T>(backDig.digNodes); newBack.RemoveAt(cntbackDig - 1); return(new DeepFTree <T> (frontDig, innerFT.Push_Back(new Node <T>(newBack)), new Digit <T>(backDig.digNodes[cntbackDig - 1], t) )); } else //less than three digits at the back -- will accomodate one more { List <T> newBack = new List <T>(backDig.digNodes); newBack.Add(t); return(new DeepFTree <T>(frontDig, innerFT, new Digit <T>(newBack))); } }