Câu hỏi:
10/10/2026 3
Viết hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kĩ thuật đệ quy.
Viết hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kĩ thuật đệ quy.
Trả lời:
Giải bởi Vietjack
Để viết hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kỹ thuật đệ quy, chương trình sẽ cần một phương thức đệ quy để thực hiện việc chèn. Dưới đây là cách triển khai mẫu:
class Node:
def __init__(self, key):
self.key = key
self.left = None
self.right = None
def insert_recursive(root, key):
# Nếu cây là rỗng, tạo một nút mới và trả về
if root is None:
return Node(key)
# Nếu khoá nhỏ hơn khoá của nút hiện tại, chèn vào cây con bên trái
if key < root.key:
root.left = insert_recursive(root.left, key)
# Nếu khoá lớn hơn hoặc bằng khoá của nút hiện tại, chèn vào cây con bên phải
else:
root.right = insert_recursive(root.right, key)
return root
# Hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kỹ thuật đệ quy
def insert_into_binary_search_tree(T, v):
T = insert_recursive(T, v)
return T
# Ví dụ minh họa
if __name__ == "__main__":
# Tạo một cây tìm kiếm nhị phân
root = Node(5)
root.left = Node(3)
root.right = Node(8)
root.left.left = Node(2)
root.left.right = Node(4)
root.right.left = Node(6)
root.right.right = Node(9)
# In cây tìm kiếm nhị phân trước khi chèn
print("Cây tìm kiếm nhị phân trước khi chèn:")
def inorder_traversal(node):
if node:
inorder_traversal(node.left)
print(node.key, end=" ")
inorder_traversal(node.right)
inorder_traversal(root)
print()
# Chèn khoá 7 vào cây tìm kiếm nhị phân
insert_into_binary_search_tree(root, 7)
# In cây tìm kiếm nhị phân sau khi chèn
print("Cây tìm kiếm nhị phân sau khi chèn:")
inorder_traversal(root)
* Chú thích:
- Node là lớp biểu diễn một nút trong cây tìm kiếm nhị phân.
- insert_recursive là hàm đệ quy để chèn một khoá mới vào cây tìm kiếm nhị phân.
- insert_into_binary_search_tree là hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kỹ thuật đệ quy.
Để viết hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kỹ thuật đệ quy, chương trình sẽ cần một phương thức đệ quy để thực hiện việc chèn. Dưới đây là cách triển khai mẫu:
class Node:
def __init__(self, key):
self.key = key
self.left = None
self.right = None
def insert_recursive(root, key):
# Nếu cây là rỗng, tạo một nút mới và trả về
if root is None:
return Node(key)
# Nếu khoá nhỏ hơn khoá của nút hiện tại, chèn vào cây con bên trái
if key < root.key:
root.left = insert_recursive(root.left, key)
# Nếu khoá lớn hơn hoặc bằng khoá của nút hiện tại, chèn vào cây con bên phải
else:
root.right = insert_recursive(root.right, key)
return root
# Hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kỹ thuật đệ quy
def insert_into_binary_search_tree(T, v):
T = insert_recursive(T, v)
return T
# Ví dụ minh họa
if __name__ == "__main__":
# Tạo một cây tìm kiếm nhị phân
root = Node(5)
root.left = Node(3)
root.right = Node(8)
root.left.left = Node(2)
root.left.right = Node(4)
root.right.left = Node(6)
root.right.right = Node(9)
# In cây tìm kiếm nhị phân trước khi chèn
print("Cây tìm kiếm nhị phân trước khi chèn:")
def inorder_traversal(node):
if node:
inorder_traversal(node.left)
print(node.key, end=" ")
inorder_traversal(node.right)
inorder_traversal(root)
print()
# Chèn khoá 7 vào cây tìm kiếm nhị phân
insert_into_binary_search_tree(root, 7)
# In cây tìm kiếm nhị phân sau khi chèn
print("Cây tìm kiếm nhị phân sau khi chèn:")
inorder_traversal(root)
* Chú thích:
- Node là lớp biểu diễn một nút trong cây tìm kiếm nhị phân.
- insert_recursive là hàm đệ quy để chèn một khoá mới vào cây tìm kiếm nhị phân.
- insert_into_binary_search_tree là hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kỹ thuật đệ quy.
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Câu 1:
Khi nào việc tìm kiếm trên cây tìm kiếm nhị phân là:
a) nhanh nhất?
b) chậm nhất?
Khi nào việc tìm kiếm trên cây tìm kiếm nhị phân là:
a) nhanh nhất?
b) chậm nhất?
Câu 2:
Cây tìm kiếm nhị phân T được thiết lập bằng cách chèn lần lượt các phần tử 3, 1, 6, 5, 0, 2, 4. Dùng sơ đồ mô tả các bước tìm kiếm giá trị khóa là:
a) 4 b) 10 c) 0
Cây tìm kiếm nhị phân T được thiết lập bằng cách chèn lần lượt các phần tử 3, 1, 6, 5, 0, 2, 4. Dùng sơ đồ mô tả các bước tìm kiếm giá trị khóa là:
a) 4 b) 10 c) 0
Câu 3:
Quan sát các cây nhị phân sau, em có nhận xét gì về giá trị của các nút trên cây?

Quan sát các cây nhị phân sau, em có nhận xét gì về giá trị của các nút trên cây?

Câu 4:
Tìm hiểu và thảo luận về tổ chức dữ liệu của cây nhị phân và tìm kiếm cây nhị phân.
Tìm hiểu và thảo luận về tổ chức dữ liệu của cây nhị phân và tìm kiếm cây nhị phân.
Câu 6:
Từ các khóa 1, 2, 3 có thể tạo ra được bao nhiêu cây tìm kiếm nhị phân? Hãy vẽ sơ đồ mô tả các cây này.
Từ các khóa 1, 2, 3 có thể tạo ra được bao nhiêu cây tìm kiếm nhị phân? Hãy vẽ sơ đồ mô tả các cây này.
Câu 7:
Bài toán: cho cây tìm kiếm nhị phân T. Yêu cầu chèn khoá v vào cây T sao cho sau khi cho sau khi chèn khoá v thì cây T vẫn là cây tìm kiếm nhị phân.
Quan sát, thảo luận, tìm hiểu thuật toán tìm kiếm khoá 7 trên cây tìm kiếm nhị phân và cách chèn khoá 7 vào cây này.
Bài toán: cho cây tìm kiếm nhị phân T. Yêu cầu chèn khoá v vào cây T sao cho sau khi cho sau khi chèn khoá v thì cây T vẫn là cây tìm kiếm nhị phân.
Quan sát, thảo luận, tìm hiểu thuật toán tìm kiếm khoá 7 trên cây tìm kiếm nhị phân và cách chèn khoá 7 vào cây này.
Câu 8:
Cho trước dãy các số A = [10, 1, 2, 11, 8, 15, 20, 9, 0].
Hãy mô tả và vẽ sơ đồ cây nhị phân biểu diễn dãy số trên sau khi thực hiện thao tác chèn như đã mô tả trong hoạt động.
Cho trước dãy các số A = [10, 1, 2, 11, 8, 15, 20, 9, 0].
Hãy mô tả và vẽ sơ đồ cây nhị phân biểu diễn dãy số trên sau khi thực hiện thao tác chèn như đã mô tả trong hoạt động.
Câu 9:
Với cây nhị phân đã có ở Câu 1, em hãy vẽ sơ đồ cây sau khi chèn khoá 14 và cho biết vị trí của khoá này ở trong cây.
Với cây nhị phân đã có ở Câu 1, em hãy vẽ sơ đồ cây sau khi chèn khoá 14 và cho biết vị trí của khoá này ở trong cây.
Câu 10:
Thay đổi thứ tự chèn các phần tử vào cây nhị phân có tạo ra các cây tìm kiếm nhị phân khác nhau hay không? Cho ví dụ minh họa.
Thay đổi thứ tự chèn các phần tử vào cây nhị phân có tạo ra các cây tìm kiếm nhị phân khác nhau hay không? Cho ví dụ minh họa.
Câu 11:
Nếu dãy số được đưa vào cây tìm kiếm nhị phân là tăng dần (hoặc giảm dần) thì cây tìm kiếm nhị phân tương ứng có dạng như thế nào?
Nếu dãy số được đưa vào cây tìm kiếm nhị phân là tăng dần (hoặc giảm dần) thì cây tìm kiếm nhị phân tương ứng có dạng như thế nào?
Câu 12:
Dữ liệu đầu vào là danh sách học sinh trong lớp và điểm trung bình các môn. Danh sách được cho trong tệp văn bản có dạng như bảng bên.
Viết chương trình đọc tập dữ liệu đầu vào trên và liên tục thực hiện các thao tác sau:
a) Nhập thêm vào danh sách học sinh và điểm trung bình.
b) Tìm kiếm với yêu cầu nhập họ tên học sinh và đưa ra kết quả họ tên học sinh, điểm trung bình hoặc thông báo "không tìm thấy".
Chương trình kết thúc khi nhập vào một xâu rỗng. Yêu cầu giải bài này bằng cây tìm kiếm nhị phân.

Dữ liệu đầu vào là danh sách học sinh trong lớp và điểm trung bình các môn. Danh sách được cho trong tệp văn bản có dạng như bảng bên.
Viết chương trình đọc tập dữ liệu đầu vào trên và liên tục thực hiện các thao tác sau:
a) Nhập thêm vào danh sách học sinh và điểm trung bình.
b) Tìm kiếm với yêu cầu nhập họ tên học sinh và đưa ra kết quả họ tên học sinh, điểm trung bình hoặc thông báo "không tìm thấy".
Chương trình kết thúc khi nhập vào một xâu rỗng. Yêu cầu giải bài này bằng cây tìm kiếm nhị phân.

Câu 13:
Cho trước dãy A bao gồm các số nguyên và các giá trị None. Viết chương trình kiểm tra xem A có phải là biểu diễn của một cây nhị phân hoàn chỉnh đã biến đổi hay không?
Ví dụ:
Dãy [10, 7, 0, 5, None, 3] là biểu diễn của cây nhị phân hoàn chỉnh đã biến đổi. Dãy [1, 6, None, 2, 3, None, 4] không là biểu diễn của cây nhị phân tổng quát nào.
Cho trước dãy A bao gồm các số nguyên và các giá trị None. Viết chương trình kiểm tra xem A có phải là biểu diễn của một cây nhị phân hoàn chỉnh đã biến đổi hay không?
Ví dụ:
Dãy [10, 7, 0, 5, None, 3] là biểu diễn của cây nhị phân hoàn chỉnh đã biến đổi. Dãy [1, 6, None, 2, 3, None, 4] không là biểu diễn của cây nhị phân tổng quát nào.
Câu hỏi mới nhất
Xem thêm »-
-
-
-
Trong CSDL QL_ThuVien, hãy xác định khóa chính của bảng MƯỢN SÁCH sau. Biết rằng trong một ngày quy định không được mượn một cuốn sách nhiều lần.
Số thẻ Mã số sách Ngày mượn Ngày trả TV-02
TO-012
5/9/2015
30/9/2015
TV-04
TN-103
12/9/2015
15/9/2015
TV-02
TN-102
24/9/2015
5/10/2015
TV-02
TO-012
5/10/2015
...
...
...
...
-
-
-
-
-
-

