public void DeleteNode(T data) { var deleteNode = HeapTree.Where(o => o.CompareTo(data) == 0).FirstOrDefault(); if (deleteNode == null) { throw new ArgumentException("delete data doesn't exist in heap"); } var lastNode = HeapTree[LastIndex]; var deleteNodeIndex = Array.IndexOf(HeapTree, deleteNode); HeapTree[deleteNodeIndex] = lastNode; ReHeapifyFromIndex(deleteNodeIndex); LastIndex--; }