Khi được yêu cầu in các nút trong cây con bên trái, một lớp có thể được tạo ra bao gồm các phương thức có thể được xác định để đặt nút gốc, thực hiện theo thứ tự duyệt, chèn các phần tử vào bên phải của nút gốc, bên trái của nút gốc, v.v. Một thể hiện của lớp được tạo và các phương thức có thể được sử dụng để thực hiện các hoạt động bắt buộc.
Dưới đây là một minh chứng về điều tương tự -
Ví dụ
class BinaryTree_struct: def __init__(self, data=None): self.key = data self.left = None self.right = None def set_root(self, data): self.key = data def inorder_traversal(self): if self.left is not None: self.left.inorder_traversal() print(self.key, end=' ') if self.right is not None: self.right.inorder_traversal() def insert_at_left(self, new_node): self.left = new_node def insert_at_right(self, new_node): self.right = new_node def search_elem(self, key): if self.key == key: return self if self.left is not None: temp = self.left.search_elem(key) if temp is not None: return temp if self.right is not None: temp = self.right.search_elem(key) return temp return None def print_left_part(self): if self.left is not None: self.left.inorder_traversal() my_instance = None print('Menu (this assumes no duplicate keys)') print('insert <data> at root') print('insert <data> left of <data>') print('insert <data> right of <data>') print('left') print('quit') while True: my_input = input('What operation would you do ? ').split() operation = my_input[0].strip().lower() if operation == 'insert': data = int(my_input[1]) new_node = BinaryTree_struct(data) suboperation = my_input[2].strip().lower() if suboperation == 'at': my_instance = new_node else: position = my_input[4].strip().lower() key = int(position) ref_node = None if my_instance is not None: ref_node = my_instance.search_elem(key) if ref_node is None: print('No such key') continue if suboperation == 'left': ref_node.insert_at_left(new_node) elif suboperation == 'right': ref_node.insert_at_right(new_node) elif operation == 'left': print('Nodes of the left subtree are : ', end='') if my_instance is not None: my_instance.print_left_part() print() elif operation == 'quit': break
Đầu ra
MenuMenu (this assumes no duplicate keys) insert <data> at root insert <data> left of <data> insert <data> right of <data> left quit What operation would you do ? insert 5 at root What operation would you do ? insert 6 left of 5 What operation would you do ? insert 8 right of 5 What operation would you do ? left Nodes of the left subtree are : 6 What operation would you do ? quit Use quit() or Ctrl-D (i.e. EOF) to exit
Giải thích
-
Lớp 'BinaryTree_struct' với các thuộc tính bắt buộc được tạo.
-
Nó có một chức năng ‘init’ được sử dụng để gán các nút bên trái và bên phải cho “Không có”.
-
Phương thức ‘set_root’ được định nghĩa để giúp đặt giá trị gốc của cây nhị phân.
-
Nó có phương thức ‘insert_at_right’ giúp thêm các phần tử vào các nút bên phải của cây.
-
Nó có phương thức ‘insert_at_left’ giúp thêm các phần tử vào các nút bên trái của cây.
-
Một phương thức khác có tên là ‘inorder_traversal’ thực hiện theo thứ tự duyệt.
-
Phương thức có tên ‘search_elem’ được xác định, giúp tìm kiếm một phần tử cụ thể.
-
Một phương thức khác có tên ‘print_left_part’ được định nghĩa, giúp chỉ hiển thị phần bên trái của cây nhị phân trên bảng điều khiển.
-
Một phiên bản được tạo và gán cho 'Không có gì'.
-
Đầu vào của người dùng được sử dụng cho thao tác cần được thực hiện.
-
Tùy thuộc vào lựa chọn của người dùng, hoạt động được thực hiện. • Kết quả phù hợp được hiển thị trên bảng điều khiển.