示例#1
0
        public void ConnectAChild(int childNumber, _234Node child)
        {
            childArray[childNumber] = child;


            if (child != null)
            {
                child.parent = this;
            }
        }
示例#2
0
        // gets appropriate child of node during search for value
        private _234Node GetNextChild(_234Node currNode, long key)
        {
            int i;
            int numItems = currNode.GetNumItems();

            for (i = 0; i < numItems; i++)
            {
                if (key < currNode.GetItem(i).dData)
                {
                    return(currNode.GetChild(i));
                }
            }

            return(currNode.GetChild(i)); // right most child
        }
示例#3
0
        private void Split(_234Node currNode)
        {
            _234DataItem itemB;
            _234DataItem itemC;

            _234Node parent;
            _234Node child2;
            _234Node child3;

            int itemIndex;

            itemC = currNode.RemoveItem();
            itemB = currNode.RemoveItem();

            child2 = currNode.DisconnectAChild(2);
            child3 = currNode.DisconnectAChild(3);

            var newRightNode = new _234Node();

            if (currNode == root)
            {
                root   = new _234Node();
                parent = root;
                root.ConnectAChild(0, currNode);
            }
            else
            {
                parent = currNode.GetParent();
            }

            itemIndex = parent.InsertItem(itemB);
            int n = parent.GetNumItems();

            for (int i = n - 1; i > itemIndex; i--)
            {
                var temp = parent.DisconnectAChild(i);
                parent.ConnectAChild(i + 1, temp);
            }

            parent.ConnectAChild(itemIndex + 1, newRightNode);

            newRightNode.InsertItem(itemC);
            newRightNode.ConnectAChild(0, child2);
            newRightNode.ConnectAChild(1, child3);
        }
示例#4
0
        private void RecursivelyDisplayTree(_234Node node, int level, int child)
        {
            Console.Write($"level=${level} child=${child} ");

            node.DisplayNode();

            int numItems = node.GetNumItems();

            for (int i = 0; i < numItems + 1; i++)
            {
                var nextNode = node.GetChild(i);

                if (nextNode != null)
                {
                    RecursivelyDisplayTree(nextNode, level + 1, i);
                }
                else
                {
                    return;
                }
            }
        }