Пример #1
0
 private void SetLeftRightParentNode(long[] values, long size)
 {
     for (long i = 0; i < size / 2; i++)
     {
         HeapNode currentNode = NodeList[Convert.ToInt32(i)];
         currentNode.Left  = GetLeftNode(i);
         currentNode.Right = GetRightNode(i);
     }
 }
Пример #2
0
        public void DeleteItem(int value)
        {
            HeapNode node = SearchItemInner(RootNode, value);

            node.Left   = null;
            node.Right  = null;
            node.Parent = null;

            Heapify(RootNode);
        }
Пример #3
0
        public void AddItem(int value)
        {
            var newNode = new HeapNode {
                Value = value
            };

            NodeList.Add(newNode);

            Heapify(RootNode);
        }
Пример #4
0
        public void SearchTest()
        {
            long[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            var    heap   = new Heap(values, 9L);

            HeapNode node = heap.SearchItem(9);

            Assert.NotNull(node);
            Assert.Equal(9, node.Value);
        }
Пример #5
0
        private void PopulateNodes(long[] values, long size)
        {
            for (long i = 0; i < size; i++)
            {
                var node = new HeapNode
                {
                    Value = values[i]
                };

                node.Parent = GetParentNode(i);

                NodeList.Add(node);
            }
        }
Пример #6
0
        /// <summary>
        /// Implementation is depends on Min/Max heap
        /// </summary>
        /// <param name="node"></param>
        private void Heapify(HeapNode node)
        {
            if (null == node || null == node.Parent)
            {
                return;
            }

            if (node.Value < node.Parent.Value)
            {
                HeapNode temp = node.Parent;
                node.Parent = node;
                node        = temp;

                Heapify(node);
            }
        }
Пример #7
0
        private HeapNode SearchItemInner(HeapNode node, int value)
        {
            if (null == node)
            {
                return(null);
            }

            if (node.Value == value)
            {
                return(node);
            }

            HeapNode nd = SearchItemInner(node.Left, value);

            if (null != nd)
            {
                return(nd);
            }
            else
            {
                return(SearchItemInner(node.Right, value));
            }
        }