What's new

Python [solved]Help in heap tree

Status
Not open for further replies.

Phrog

Forum Veteran
Elite
Joined
Jan 25, 2017
Posts
2,131
Reaction
1,379
Points
637
May heap tree po ako dito, and gumagana naman yung Print function, pero ang problema ko ngayon
yung delete function, kagabi ko pa inaayos pero di ko maayos.

Python:
#delete function
    def c4():
        n = len(arr)
        print("\nMAX HEAP AFTER DELETION:")
        heap.maxDeleteRoot(arr)
        heap.printmaxArray(arr, n)

        print("\nMIN HEAP AFTER DELETION:")
        heap.minDeleteRoot(arr)
        heap.printminArray(arr, n)

Python:
#output
Enter a Command: 4

MAX HEAP AFTER DELETION:
5 9 2 1 4 5

MIN HEAP AFTER DELETION:
5 9 2 1 4 5

Ang balak ko po sana, madelete yung max(9) and min(1) value, pero iba po nangyayari. Thank you po

Python:
#main code
import os
import sys
#maxheap
class heap:
    #check nodes so it can arrange them based on values
    def max_heapify(arr, i):
        left = 2 * i + 1
        right = 2 * i + 2
        largest = i
        if left < len(arr) and arr[left] > arr[largest]:
            largest = left
        if right < len(arr) and arr[right] > arr[largest]:
            largest = right
        if largest != i:
            arr[i], arr[largest] = arr[largest], arr[i]
            heap.max_heapify(arr, largest)

    def build_max_heap(arr):
        for i in range(len(arr) // 2, -1, -1):
            heap.max_heapify(arr, i)

    #print maxheap
    def printmaxArray(arr, n):
        for i in range(n):
            print(arr[i], end = ' ')
        print()

    #delete function
    def maxDeleteRoot(arr):
        n = len(arr)
        maxlastElement = arr[n - 1]
        arr[n] = maxlastElement
        n -= 1
        heap.max_heapify(arr, n)

    def exitProgram():
        os.system('cls')
        print(f"THANK YOU FOR USUNG THE PROGRAM!")
        sys.exit()

    def tryAgain():
        choice = (input("\nAgain(y/n): ").lower())
        if choice == 'y':
            heap.enterCommand()
        elif choice == 'n':
            heap.exitProgram()
        else:
            return f"invalid input"
        heap.tryAgain()

# Min heap tree
    def min_heapify(arr, k):
        left = 2 * k + 1
        right = 2 * k + 2
        if left < len(arr) and arr[left] < arr[k]:
            smallest = left
        else:
            smallest = k
        if right < len(arr) and arr[right] < arr[smallest]:
            smallest = right
        if smallest != k:
            arr[k], arr[smallest] = arr[smallest], arr[k]
            heap.min_heapify(arr, smallest)

    def printminArray(arr, n):
        for i in range(n):
            print(arr[i], end = ' ')
        print()

    def build_min_heap(arr):
        n = int((len(arr) // 2)-1)
        for k in range(n, -1, -1):
            heap.min_heapify(arr, k)

    #delete function
    def minDeleteRoot(arr):
        n = len(arr)
        minlastElement = arr[n - 1]
        arr[n] = minlastElement
        n -= 1
        heap.max_heapify(arr, n)

    def c4():
        n = len(arr)
        print("\nMAX HEAP AFTER DELETION:")
        heap.maxDeleteRoot(arr)
        heap.printmaxArray(arr, n)

        print("\nMIN HEAP AFTER DELETION:")
        heap.minDeleteRoot(arr)
        heap.printminArray(arr, n)

    def c6():
        n = len(arr)
        heap.build_max_heap(arr)
        print("MAX HEAP:")
        heap.printmaxArray(arr, n)

        heap.build_min_heap(arr)
        print("\nMINHEAP: ")
        heap.printminArray(arr, n)
        heap.tryAgain()

    #user input function
    def enterCommand():
        global arr
        arr = [3, 9, 2, 1, 4, 5]
        command = int(input("\nEnter a Command: "))
        if command == 2:
            n = len(arr)
            key = int(input("Insert Node: "))
            heap.insertNode(arr, key)
            print()

        elif command == 4:
            heap.c4()

        elif command == 6:
            heap.c6()

        elif command == 0:
            heap.exitProgram()

        else:   
            return f"INVALID INPUT! TRY AGAIN"
        heap.enterCommand()
Python:
# choices number 2, 4 and 6 lang po
# driver code
from newopne import *
import time

time.sleep(0.5)
print("                           MENU FOR NON-LINER DATA STRUCTURE     ")
time.sleep(0.5)
print("=================================================================================================")
print("=                                     <<[0] Exit>>                                              =")
print("=   <<ADDING ITEMS>>               <<DELETING ITEMS>>                <<PRINTING ITEMS>>         =")
print("= [1] Add items to BSTREE     [3] Delete items from BSTREE     [5] Print items from BSTREE      =")
print("= [2] Add items to HEAP TREE  [4] Delete items from HEAP TREE  [6] Print items from HEAP TREE   =")
print("=================================================================================================")
time.sleep(0.5)
heap.enterCommand()
 
Ang balak ko po sana, madelete yung max(9) and min(1) value, pero iba po nangyayari. Thank you po

ganito ba dapat final output ?

Python:
# arr = [3, 9, 2, 1, 4, 5]


MAX HEAP AFTER DELETION:
[3, 2, 1, 4, 5]

MIN HEAP AFTER DELETION:
[3, 2, 4, 5]

Kung ganyan, try mo ganito:

Python:
def maxDeleteRoot(arr: list):
    m = max(arr) # 9
    arr.pop(arr.index(m))
    print(arr)

    # n = len(arr) - 1
    # maxlastElement = arr[n - 1]
    # arr[n] = maxlastElement
    # n -= 1
    # heap.max_heapify(arr, n)
    

def minDeleteRoot(arr):
    m = min(arr) # 1
    arr.pop(arr.index(m))
    print(arr)
    # n = len(arr) - 1
    # minlastElement = arr[n - 1]
    # arr[n] = minlastElement
    # n -= 1
    # heap.max_heapify(arr, n)
 
ganito ba dapat final output ?

Python:
# arr = [3, 9, 2, 1, 4, 5]


MAX HEAP AFTER DELETION:
[3, 2, 1, 4, 5]

MIN HEAP AFTER DELETION:
[3, 2, 4, 5]

Kung ganyan, try mo ganito:

Python:
def maxDeleteRoot(arr: list):
    m = max(arr) # 9
    arr.pop(arr.index(m))
    print(arr)

    # n = len(arr) - 1
    # maxlastElement = arr[n - 1]
    # arr[n] = maxlastElement
    # n -= 1
    # heap.max_heapify(arr, n)
   

def minDeleteRoot(arr):
    m = min(arr) # 1
    arr.pop(arr.index(m))
    print(arr)
    # n = len(arr) - 1
    # minlastElement = arr[n - 1]
    # arr[n] = minlastElement
    # n -= 1
    # heap.max_heapify(arr, n)
opo, sige po try ko po ngayon, maraming salamat po
 
Kung ganyan, di ko sure kung bakit needed pa ng "heapify" function.
Pero kung required talaga yan, try mo nalang rin fix.
 
Kung ganyan, di ko sure kung bakit needed pa ng "heapify" function.
Pero kung required talaga yan, try mo nalang rin fix.
Sige po, kailangan din po kasi ibubuild po muna sya from max heap and min heap, saka po ipeperform ang deletion. Thank po sa code, napgana ko na po yung delete, imodify ko nalang po para po magamit yung heapify
 
Status
Not open for further replies.

Similar threads

Back
Top