private ArrayHeadNode <object []> BuildFromOneLeaf(object[] array, BinaryTreeElement orgRoot, PathElement pathElem) { if (array.Length > 1) { throw new System.Exception("How come we got a leaf returned when we had " + array.Length + " elements is the args?"); } else { return(new ArrayHeadNode <object []>(orgRoot, new EmptyLeaf(), array, array.Length, pathElem)); } }
private List <BinaryTreeElement> BuildHigherLayer(int layer, List <BinaryTreeElement> inList) { if (inList.Count == 0) { throw new System.Exception("Cannot work on empty arrays. Layer: " + layer); } else if (inList.Count == 1) { return(inList); } var returnArray = new List <BinaryTreeElement>(); var nrOfNodesToCreate = inList.Count / 2; BinaryTreeElement leftValue = null; var isLeft = true; foreach (var element in inList) { if (isLeft) { leftValue = element; isLeft = false; } else { var tempNode = new Node(leftValue, element); returnArray.Add(tempNode); nrOfNodesToCreate--; isLeft = true; leftValue = null; } } if (!isLeft) { returnArray.Add(leftValue); } if (nrOfNodesToCreate != 0) { System.Console.WriteLine("Why didn't we build exactly the correct amount? Layer: " + layer + " , residue: " + nrOfNodesToCreate + " , input args size: " + inList.Count + "."); } return(this.BuildHigherLayer(layer + 1, returnArray)); }