public HeapNode(int _val) { val = _val; parent = null; left = null; right = null; }
public int Delete() { if (root == null) { Console.WriteLine("Heap is empty!!!"); return(-1); } else { int returnVal = root.val; root.val = last.val; if (dummy.parent.left == dummy) { dummy.parent.left = null; } else { dummy.parent.right = null; } dummy = last; FindLastPos(); MakeHeapFromRoot(); return(returnVal); } }
public HeapNode() { val = 0; parent = null; left = null; right = null; }
public static HeapNode createHeap() { data key = new data(0, ""); HeapNode next = null; HeapNode H = new HeapNode(key, next); return(H); }
public void printHeap(HeapNode N) { HeapNode L = N; while (L != null) { Console.Write("\n" + L.key.pKey); L = L.next; } }
public void tailInsert(HeapNode H, data key) { int j = 0; HeapNode L = H; while (L.next != null) { L = L.next; } L.next = new HeapNode(key, null); }
void MakeHeapFromRoot() { HeapNode curNode = root; while (curNode.left != null) { if (curNode.right != null) { if (curNode.val < curNode.left.val) { if (curNode.left.val < curNode.right.val) { int tmp = curNode.val; curNode.val = curNode.right.val; curNode.right.val = tmp; curNode = curNode.right; } else { int tmp = curNode.val; curNode.val = curNode.left.val; curNode.left.val = tmp; curNode = curNode.left; } } else if (curNode.val < curNode.right.val) { int tmp = curNode.val; curNode.val = curNode.right.val; curNode.right.val = tmp; curNode = curNode.right; } else { break; } } else { if (curNode.val < curNode.left.val) { int tmp = curNode.val; curNode.val = curNode.left.val; curNode.left.val = tmp; } break; } } }
public void insertNode(HeapNode H, data key, int pos) { int j = 0; HeapNode L = H; while (j < pos - 1) { L = L.next; j++; } HeapNode C = new HeapNode(key, L.next); L.next = C; }
public void deleteNode(HeapNode N, int pos) { int j = 0; HeapNode L = N; while (j < pos - 1) { L = L.next; j++; } HeapNode K = L.next; L.next = L.next.next; K = null; }
void TravelsByPre(HeapNode _root) { if (_root != dummy) { Console.Write(_root.val + " "); } if (_root.left != null) { TravelsByPre(_root.left); } if (_root.right != null) { TravelsByPre(_root.right); } }
public void Insert(int _val) { if (root == null) { root = dummy; root.val = _val; last = root; root.left = dummy = new HeapNode(); dummy.parent = root; } else { last = dummy; last.val = _val; FindDummyPos(); MakeHeapFromLeaf(); } }
void MakeHeapFromLeaf() { HeapNode curNode = last; if (curNode != root) { while (curNode.val > curNode.parent.val) { int tmp = curNode.val; curNode.val = curNode.parent.val; curNode.parent.val = tmp; curNode = curNode.parent; if (curNode == root) { break; } } } }
void FindLastPos() { HeapNode curNode = last; if (last == root) { root = null; last = null; } else { if (last.parent.right == last) { last = last.parent.left; } else { while ((curNode.parent.right != curNode) && (curNode.parent != root)) { curNode = curNode.parent; } if (curNode.parent.left == curNode) { curNode = curNode.parent.right; } else { curNode = curNode.parent.left; } while (curNode.right != null) { curNode = curNode.right; } last = curNode; } } }
void FindDummyPos() { HeapNode curNode = dummy; if (curNode.parent.left == dummy) { dummy = new HeapNode(); curNode.parent.right = dummy; dummy.parent = curNode.parent; } else { while (curNode.parent.left != curNode && curNode.parent != root) { curNode = curNode.parent; } if (curNode.parent.right == curNode) { curNode = curNode.parent.left; } else { curNode = curNode.parent.right; } while (curNode.left != null) { curNode = curNode.left; } dummy = new HeapNode(); curNode.left = dummy; dummy.parent = curNode; } }
public HeapByLinked() { root = null; last = null; dummy = new HeapNode(); }
public HeapNode(data key, HeapNode next) { this.key = key; this.next = next; }