Trong bài viết này, chúng ta đã khám phá chiến lược triển khai Cây nhị phân trong Ngôn ngữ lập trình Python với lời giải thích đầy đủ và các hoạt động khác nhau như duyệt, tìm kiếm và xóa
Mục lục
- Khái niệm cơ bản về cây nhị phân
- Triển khai bằng Python với Giải thích
- hoạt động ngang
- Hoạt động tìm kiếm
- Thao tác xóa
Cây nhị phân là gì?
Cây nhị phân là loại cấu trúc dữ liệu thừa kế đặc biệt được xác định bằng các nút. Về cơ bản, phiên bản mở rộng của danh sách liên kết. Đó là cấu trúc dữ liệu cây trong đó mỗi nút được phép có tối đa hai nút con, thường được gọi là Con trái và Con phải. Băm, định tuyến dữ liệu cho lưu lượng mạng, nén dữ liệu và cây tìm kiếm nhị phân là một số ứng dụng của nó
Dữ liệu, cây con trái và cây con phải là ba tính năng quan trọng trong cây nhị phân. Mỗi dữ liệu nằm trong ô Dữ liệu với con trỏ bên trái trỏ đến cây con bên trái tiếp theo và ô Dữ liệu bên phải với con trỏ bên phải trỏ đến tám cây con tiếp theo
**Một số thuật ngữ chính. - **
Nguồn gốc. - Nút trên cùng
Chiều cao. - Tổng số cạnh từ nút gốc đến nút cuối cùng [sâu nhất]
Lá cây. - Nút không có con
Độ sâu của một cái cây. Số cạnh từ nút của cây đến gốc là
Nút nội bộ. - Nút có ít nhất một nút con
Loại cây nhị phân
- Cây nhị phân hoàn hảo
Cây nhị phân với tất cả các nút bên trong [tất cả các nút trừ nút lá] có hai con và tất cả các nút lá có cùng độ sâu
- Cây nhị phân cân bằng
Mọi cây có chênh lệch tối đa giữa chiều cao cây con bên phải và bên trái là 1
3] Cây nhị phân hoàn chỉnh
Tất cả cây nhị phân trong đó mọi nút được lấp đầy hoàn toàn bằng nút 2 hoặc 0
4] Cây nhị phân suy biến
Mỗi cây nhị phân, trong đó mỗi nút bên trong chỉ có một nút con duy nhất
Ứng dụng của cây nhị phân
- Được sử dụng trong Trò chơi điện tử 3d
- Được sử dụng nhiều trong bộ định tuyến cho mục đích lập bảng
- Quy trình lập lịch trình trong hệ điều hành
Triển khai Quy tắc. -
class BinaryTree:
def __init__[self, value]:
self.left = None
self.right = None
self.value = value
def insert[self, value]:
if self.value:
if data < self.value:
if self.left is None:
self.left = BinaryTree[value]
else:
self.left.insert[value]
elif data > self.value:
if self.right is None:
self.right = BinaryTree[value]
else:
self.right.insert[value]
else:
self.value = value
def PrintTree[self]:
if self.left:
self.left.PrintTree[]
print[ self.data],
if self.right:
self.right.PrintTree[]
root = BinaryTree[100]
root.insert[50]
root.insert[55]
root.insert[60]
root.insert[20]
root.insert[52]
root.PrintTree[]
đầu ra. - 20,24,35,40,55,60
Cấu trúc của cây. -
40
/ \
35 55
/ \
20 60
\
24
**Giải trình. - **
Ở đây, chúng ta định nghĩa một lớp BinarTree, trong đó có 3 phương thức được định nghĩa
- ________số 8_______
- chèn[]
- PrintTree[]
Các phương thức __init__
được tự gọi là
Bây giờ trong hàm chính khi chúng ta tạo một đối tượng của lớp trong gốc, chúng ta chuyển giá trị 40, mà chúng ta muốn là phần tử gốc. Trong dòng tiếp theo, chúng ta gọi phương thức insert[] với đối tượng và truyền giá trị 35, giá trị này đưa luồng chương trình đến hàm chèn, ở đó chúng ta kiểm tra xem giá trị mới lớn hơn hay nhỏ hơn giá trị gốc của nó với [if value key: root.left = delete_Node[root.left, key] elif root.val < key: root.right= delete_Node[root.right, key] else: if not root.right: return root.left if not root.left: return root.right temp_val = root.right mini_val = temp_val.val while temp_val.left: temp_val = temp_val.left mini_val = temp_val.val root.right = deleteNode[root.right,root.val] return root
Giải trình
Các chương trình trên giải thích quy trình xóa một phần tử cụ thể khỏi cây nhị phân đã cho. Ở đây root đại diện cho nút gốc và key đại diện cho phần tử cần xóa hoặc đã được người dùng đặt hàng. 4
-> Tìm kiếm phần tử chính trong cây con trái hoặc phải
Ban đầu, nó kiểm tra xem gốc [phần tử trên cùng] có trống hay không, nếu nó không trống thì nó kiểm tra phần tử khóa ít hơn phần tử gốc, nếu nó đúng thì người tìm kiếm curosr ở cây con bên trái của cây chính,
-> Kiểm tra nút chính sau khi tìm thấy và cuối cùng xóa nó
Trong điều kiện khác với điều kiện nếu không root. bên phải, nó kiểm tra xem có nút con nào phù hợp với nút [khóa] không và nút mới chính là nút gốc và với điều kiện nếu không phải là nút gốc. còn lại nó kiểm tra nếu không còn nút con nào để xóa thì nút gốc chính là nút đó
Bây giờ nếu tồn tại cả nút con bên trái và bên phải cho nút chính sẽ bị xóa thì chúng ta thay thế nút chính bằng giá trị nhỏ nhất của cây con bên phải của nó và sau đó xóa nút nhỏ nhất trong cây con bên phải đó
Với bài viết này tại OpenGenus, bạn phải có ý tưởng hoàn chỉnh về Triển khai Cây nhị phân trong Ngôn ngữ lập trình Python