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); } }
public void DeleteItem(int value) { HeapNode node = SearchItemInner(RootNode, value); node.Left = null; node.Right = null; node.Parent = null; Heapify(RootNode); }
public void AddItem(int value) { var newNode = new HeapNode { Value = value }; NodeList.Add(newNode); Heapify(RootNode); }
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); }
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); } }
/// <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); } }
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)); } }