public static bool HasParent(HeapNode r) { if (r.index > 0) { return(true); } else { return(false); } }
public static void HeapifyUp(HeapNode last) { var lastNode = last; bool isNodeInPlace = false; while (HasParent(lastNode) && !isNodeInPlace) { var parentNode = GetParentNode(lastNode); if (parentNode.data > lastNode.data) { var tempData = lastNode.data; lastNode.data = parentNode.data; parentNode.data = tempData; lastNode = parentNode; } else { isNodeInPlace = true; } } }
public static void Enqueue(int data) { if (root == null) { root = new HeapNode(data, 0); } else { var lastNode = GetLastNode(root); if (lastNode.left == null) { lastNode.left = new HeapNode(data, GetLeftIndex(lastNode.index)); HeapifyUp(lastNode.left); } else if (lastNode.right == null) { lastNode.right = new HeapNode(data, GetRightIndex(lastNode.index)); HeapifyUp(lastNode.right); } } }
public static HeapNode GetLastNode(HeapNode r) { if (r == null) { return(null); } Queue <HeapNode> q = new Queue <HeapNode>(); q.Enqueue(r); while (q.Count > 0) { var current = q.Dequeue(); if (current.left == null || current.right == null) { return(current); } q.Enqueue(current.left); q.Enqueue(current.right); } return(null); }