示例#1
0
 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));
     }
 }
示例#2
0
        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));
        }