Skip to content

Descrease Key

Implementation

package main

import "fmt"

type MinHeap struct {
    arr []int
}



func newMinHeap(heapArr []int) *MinHeap {
    mh := &MinHeap{
        arr: make([]int, len(heapArr)),
    }
    copy(mh.arr, heapArr)

    return mh
}


func parent(i int) int {
    return (i - 1) / 2
}

func (mh *MinHeap) decreaseKey(idx, val int) {
    mh.arr[idx] = val

    for idx >= 0 && mh.arr[idx] < mh.arr[parent(idx)] {
        mh.arr[idx], mh.arr[parent(idx)] = mh.arr[parent(idx)], mh.arr[idx]
        idx = parent(idx)
    }
}

func main() {
    minHeap := newMinHeap([]int{20, 80, 200, 90, 100, 250, 500, 120})
    fmt.Println(minHeap.arr)
    minHeap.decreaseKey(3, 10)
    fmt.Println(minHeap.arr)
}