לדלג לתוכן

10.4 עצים ומיון פתרון

מיון - הבנת האלגוריתמים

def selection_sort(arr: list) -> list:
    for i in range(len(arr)):
        min_idx = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr


def bubble_sort(arr: list) -> list:
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr


def insertion_sort(arr: list) -> list:
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key
    return arr


data = [64, 34, 25, 12, 22, 11, 90]
print(selection_sort(data[:]))   # [11, 12, 22, 25, 34, 64, 90]
print(bubble_sort(data[:]))      # [11, 12, 22, 25, 34, 64, 90]
print(insertion_sort(data[:]))   # [11, 12, 22, 25, 34, 64, 90]

עץ בינארי - חיפוש

class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None


class BST:
    def __init__(self):
        self.root = None

    def insert(self, value) -> None:
        if not self.root:
            self.root = Node(value)
        else:
            self._insert(self.root, value)

    def _insert(self, node: Node, value) -> None:
        if value < node.data:
            if node.left is None:
                node.left = Node(value)
            else:
                self._insert(node.left, value)
        else:
            if node.right is None:
                node.right = Node(value)
            else:
                self._insert(node.right, value)

    def search(self, value) -> bool:
        return self._search(self.root, value)

    def _search(self, node: Node | None, value) -> bool:
        if node is None:
            return False
        if node.data == value:
            return True
        if value < node.data:
            return self._search(node.left, value)
        return self._search(node.right, value)

    def inorder(self) -> None:
        self._inorder(self.root)
        print()

    def _inorder(self, node: Node | None) -> None:
        if node:
            self._inorder(node.left)
            print(node.data, end=" ")
            self._inorder(node.right)


bst = BST()
for val in [5, 3, 7, 1, 4, 6, 8]:
    bst.insert(val)

bst.inorder()          # 1 3 4 5 6 7 8
print(bst.search(4))   # True
print(bst.search(9))   # False

שאלות Leetcode

אין פתרון קוד כאן - פתרו בעצמכם ב-Leetcode. אם תקועים, קראו את הפתרון הרשמי ואז כתבו אותו מחדש בלי להסתכל.