Làm thế nào để bạn tạo một cây danh sách trong python?

Đưa ra một danh sách các danh sách, hãy viết chương trình Python để chuyển đổi danh sách các danh sách đã cho thành một từ điển dạng cây

ví dụ

Input : [[1], [2, 1], [3, 1], [4, 2, 1], [5, 2, 1], [6, 3, 1], [7, 3, 1]]
Output : {1: {2: {4: {}, 5: {}}, 3: {6: {}, 7: {}}}}

Input : [['A'], ['B', 'A'], ['C', 'A'], ['D', 'C', 'A']]
Output : {'A': {'C': {'D': {}}, 'B': {}}}

 
Phương pháp #1. Phương pháp Naive
Đây là phương pháp Naive trong đó chúng tôi sử dụng hai vòng lặp for để duyệt qua danh sách các danh sách. Chúng tôi khởi tạo 'cây' từ điển trống thành currTree và mỗi lần chúng tôi kiểm tra xem khóa [danh sách mục của danh sách] có được bao gồm trong currTree hay không. Nếu không, hãy đưa nó vào currTree, nếu không thì không làm gì cả. Cuối cùng, gán

{'A': {'B': {}, 'C': {'D': {}}}}
7 cho
{'A': {'B': {}, 'C': {'D': {}}}}
8.




{'A': {'B': {}, 'C': {'D': {}}}}
9

{'A': {'B': {}, 'C': {'D': {}}}}
0

{'A': {'B': {}, 'C': {'D': {}}}}
1

{'A': {'B': {}, 'C': {'D': {}}}}
2
{'A': {'B': {}, 'C': {'D': {}}}}
3
{'A': {'B': {}, 'C': {'D': {}}}}
0____11

{'A': {'B': {}, 'C': {'D': {}}}}
2
{'A': {'B': {}, 'C': {'D': {}}}}
3
{'A': {'B': {}, 'C': {'D': {}}}}
4
{'A': {'B': {}, 'C': {'D': {}}}}
5

{'A': {'B': {}, 'C': {'D': {}}}}
2
{'A': {'B': {}, 'C': {'D': {}}}}
7
{'A': {'B': {}, 'C': {'D': {}}}}
8
{'A': {'B': {}, 'C': {'D': {}}}}
9
{'A': {'B': {}, 'C': {'D': {}}}}
0
{'A': {'B': {}, 'C': {'D': {}}}}
1

{'A': {'B': {}, 'C': {'D': {}}}}
2
{'A': {'B': {}, 'C': {'D': {}}}}
8
{'A': {'B': {}, 'C': {'D': {}}}}
4
{'A': {'B': {}, 'C': {'D': {}}}}
3

{'A': {'B': {}, 'C': {'D': {}}}}
1

{'A': {'B': {}, 'C': {'D': {}}}}
2
{'A': {'B': {}, 'C': {'D': {}}}}
7
{'A': {'B': {}, 'C': {'D': {}}}}
9
{'A': {'B': {}, 'C': {'D': {}}}}
9
{'A': {'B': {}, 'C': {'D': {}}}}
71
{'A': {'B': {}, 'C': {'D': {}}}}
72
{'A': {'B': {}, 'C': {'D': {}}}}
73
{'A': {'B': {}, 'C': {'D': {}}}}
74

{'A': {'B': {}, 'C': {'D': {}}}}
75
{'A': {'B': {}, 'C': {'D': {}}}}
76
{'A': {'B': {}, 'C': {'D': {}}}}
9
{'A': {'B': {}, 'C': {'D': {}}}}
78
{'A': {'B': {}, 'C': {'D': {}}}}
9
{'A': {'B': {}, 'C': {'D': {}}}}
80

{'A': {'B': {}, 'C': {'D': {}}}}
81
{'A': {'B': {}, 'C': {'D': {}}}}
7
{'A': {'B': {}, 'C': {'D': {}}}}
4
{'A': {'B': {}, 'C': {'D': {}}}}
5

{'A': {'B': {}, 'C': {'D': {}}}}
75
{'A': {'B': {}, 'C': {'D': {}}}}
8
{'A': {'B': {}, 'C': {'D': {}}}}
4
{'A': {'B': {}, 'C': {'D': {}}}}
7

{'A': {'B': {}, 'C': {'D': {}}}}
89

{'A': {'B': {}, 'C': {'D': {}}}}
2____391
{'A': {'B': {}, 'C': {'D': {}}}}
3

{'A': {'B': {}, 'C': {'D': {}}}}
1

{'A': {'B': {}, 'C': {'D': {}}}}
94

{'A': {'B': {}, 'C': {'D': {}}}}
95
{'A': {'B': {}, 'C': {'D': {}}}}
4
{'A': {'B': {}, 'C': {'D': {}}}}
97
{'A': {'B': {}, 'C': {'D': {}}}}
98
{'A': {'B': {}, 'C': {'D': {}}}}
99
{'A': {'B': {}, 'C': {'D': {}}}}
00
{'A': {'B': {}, 'C': {'D': {}}}}
01
{'A': {'B': {}, 'C': {'D': {}}}}
98
{'A': {'B': {}, 'C': {'D': {}}}}
99
{'A': {'B': {}, 'C': {'D': {}}}}
04
{'A': {'B': {}, 'C': {'D': {}}}}
01
{'A': {'B': {}, 'C': {'D': {}}}}
98
{'A': {'B': {}, 'C': {'D': {}}}}
99
{'A': {'B': {}, 'C': {'D': {}}}}
08
{'A': {'B': {}, 'C': {'D': {}}}}
01
{'A': {'B': {}, 'C': {'D': {}}}}
04
{'A': {'B': {}, 'C': {'D': {}}}}
01
{'A': {'B': {}, 'C': {'D': {}}}}
98
{'A': {'B': {}, 'C': {'D': {}}}}
13

Trong một cây được đại diện bởi một danh sách các danh sách, chúng ta sẽ bắt đầu với cấu trúc dữ liệu danh sách của Python và viết các hàm được định nghĩa ở trên. Mặc dù việc viết giao diện dưới dạng một tập hợp các thao tác trong danh sách hơi khác so với các kiểu dữ liệu trừu tượng khác mà chúng tôi đã triển khai, nhưng thật thú vị khi làm như vậy vì nó cung cấp cho chúng tôi cấu trúc dữ liệu đệ quy đơn giản mà chúng tôi có thể xem và kiểm tra trực tiếp. Trong một danh sách dạng cây danh sách, chúng ta sẽ lưu trữ giá trị của nút gốc là phần tử đầu tiên của danh sách. Phần tử thứ hai của danh sách sẽ tự nó là một danh sách đại diện cho cây con bên trái. Phần tử thứ ba của danh sách sẽ là một danh sách khác đại diện cho cây con bên phải. Để minh họa kỹ thuật lưu trữ này, hãy xem một ví dụ. hiển thị một cây đơn giản và triển khai danh sách tương ứng

Hình 1. một cây nhỏ

{'A': {'B': {}, 'C': {'D': {}}}}
8

Lưu ý rằng chúng ta có thể truy cập các cây con của danh sách bằng cách lập chỉ mục danh sách tiêu chuẩn. Gốc của cây là

{'A': {'B': {}, 'C': {'D': {}}}}
1, cây con bên trái của gốc là
{'A': {'B': {}, 'C': {'D': {}}}}
2 và cây con bên phải là
{'A': {'B': {}, 'C': {'D': {}}}}
3. minh họa việc tạo một cây đơn giản bằng danh sách. Sau khi cây được xây dựng, chúng ta có thể truy cập vào gốc và các cây con bên trái và bên phải. Một thuộc tính rất hay của cách tiếp cận danh sách các danh sách này là cấu trúc của một danh sách đại diện cho một cây con tuân theo cấu trúc được xác định cho một cây; . Một cây con có một giá trị gốc và hai danh sách trống là một nút lá. Một tính năng hay khác của cách tiếp cận danh sách các danh sách là nó tổng quát hóa cho một cây có nhiều cây con. Trong trường hợp cây nhiều hơn cây nhị phân, cây con khác chỉ là một danh sách khác

Hãy chính thức hóa định nghĩa này về cấu trúc dữ liệu dạng cây bằng cách cung cấp một số hàm giúp chúng ta dễ dàng sử dụng danh sách dưới dạng cây. Lưu ý rằng chúng ta sẽ không định nghĩa một lớp cây nhị phân. Các hàm chúng ta sẽ viết sẽ chỉ giúp chúng ta thao tác với một danh sách chuẩn như thể chúng ta đang làm việc với một cái cây

{'A': {'B': {}, 'C': {'D': {}}}}
9

Hàm

{'A': {'B': {}, 'C': {'D': {}}}}
4 chỉ đơn giản là tạo một danh sách với một nút gốc và hai danh sách con trống cho các phần tử con. Để thêm một cây con bên trái vào gốc của cây, chúng ta cần chèn một danh sách mới vào vị trí thứ hai của danh sách gốc. Chúng ta phải cẩn thận. Nếu danh sách đã có thứ gì đó ở vị trí thứ hai, chúng ta cần theo dõi nó và đẩy nó xuống dưới dạng cây con bên trái của danh sách mà chúng ta đang thêm. hiển thị mã Python để chèn con bên trái

Liệt kê 1

{'A': {'B': {}, 'C': {'D': {}}}}
0

Lưu ý rằng để chèn một phần tử con bên trái, trước tiên chúng ta lấy danh sách [có thể trống] tương ứng với phần tử con bên trái hiện tại. Sau đó, chúng tôi thêm phần tử con bên trái mới, cài đặt phần tử con bên trái cũ làm phần tử con bên trái của phần tử mới. Điều này cho phép chúng ta ghép một nút mới vào cây ở bất kỳ vị trí nào. Mã cho

{'A': {'B': {}, 'C': {'D': {}}}}
90 tương tự như
{'A': {'B': {}, 'C': {'D': {}}}}
91 và được hiển thị trong

Liệt kê 2

{'A': {'B': {}, 'C': {'D': {}}}}
3

Để hoàn thiện tập hợp các hàm tạo cây này [xem ], hãy viết một vài hàm truy cập để lấy và đặt giá trị gốc, cũng như lấy các cây con bên trái hoặc bên phải

Liệt kê 3

{'A': {'B': {}, 'C': {'D': {}}}}
4

thực hành các chức năng cây chúng ta vừa viết. Bạn nên thử nó cho chính mình. Một trong những bài tập yêu cầu bạn vẽ cấu trúc cây từ tập hợp các cuộc gọi này

Tự kiểm tra

    Q-3. Cho các tuyên bố sau

    {'A': {'B': {}, 'C': {'D': {}}}}
    
    5

    Câu trả lời nào là đại diện chính xác của cây?

  • ['A B C D', [], []]]]
  • Không hẳn, cây này thiếu nút 'e'
  • ['a', ['c', [], ['d', ['e', [], []], []]], ['b', [], []]]
  • Điều này là gần, nhưng nếu bạn cẩn thận, bạn sẽ thấy rằng con trái và con phải của gốc được hoán đổi
  • ['a', ['b', [], []], ['c', [], ['d', ['e', [], []], []]]]
  • Rất tốt
  • ['a', ['b', [], ['d', ['e', [], []], []]], ['c', [], []]]
  • Điều này là gần, nhưng tên con bên trái và bên phải đã được hoán đổi cùng với các cấu trúc bên dưới

Viết một hàm

{'A': {'B': {}, 'C': {'D': {}}}}
92 trả về một cây bằng cách sử dụng danh sách các hàm danh sách giống như thế này

Làm cách nào để tạo cây trong Python?

Để chèn vào một cây, chúng ta sử dụng cùng một lớp nút đã tạo ở trên và thêm một lớp chèn vào nó . Lớp chèn so sánh giá trị của nút với nút cha và quyết định thêm nó dưới dạng nút trái hoặc nút phải. Cuối cùng, lớp PrintTree được sử dụng để in cây.

Làm cách nào để chuyển đổi danh sách thành cây nhị phân trong Python?

Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau. .
Nếu A trống, thì trả về Null
tìm phần tử ở giữa và root nó
Chia mảng thành hai mảng con, phần bên trái của phần tử giữa và phần bên phải của phần tử giữa
thực hiện đệ quy cùng một tác vụ cho phân đoạn bên trái và phân đoạn bên phải

Cây trong Python là gì?

Cây là một cấu trúc dữ liệu phi tuyến tính. Nó là một cấu trúc dữ liệu phân cấp có các nút được kết nối thông qua các liên kết. Nút trên cùng của cây không có nút cha được gọi là nút gốc. Cây

Làm cách nào để tạo cây tìm kiếm nhị phân từ danh sách các số trong Python?

Xây dựng BST [Cây tìm kiếm nhị phân] từ trình duyệt thứ tự cấp đã cho của nó. .
Đầu tiên, chọn phần tử đầu tiên của mảng và root nó
Chọn phần tử thứ hai, nếu giá trị của nó nhỏ hơn giá trị của nút gốc thì nó sẽ là con trái,
Khác làm cho nó đúng con

Chủ Đề