Giả sử chúng ta có một danh sách được liên kết đơn lẻ, chúng ta phải chuyển đổi nó thành một đường dẫn cây nhị phân bằng cách sử dụng các quy tắc sau -
- Phần đầu của danh sách được liên kết là phần gốc.
- Mỗi nút tiếp theo là nút con bên trái của nút cha khi giá trị của nó nhỏ hơn, nếu không nó sẽ là nút con bên phải.
Vì vậy, nếu đầu vào là [2,1,3,4,0,5], thì đầu ra sẽ là
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- Xác định một hàm giải quyết (). Điều này sẽ lấy nút
- nếu nút là null, thì
- trả về null
- root:=tạo một nút cây có giá trị giống với giá trị của nút
- nếu nút tiếp theo không phải là null, thì
- if value of next of node
- left of root:=giải quyết (tiếp theo của nút)
- if value of next of node
- nếu không,
- bên phải của gốc:=giải quyết (tiếp theo của nút)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class ListNode: def __init__(self, data, next = None): self.val = data self.next = next def make_list(elements): head = ListNode(elements[0]) for element in elements[1:]: ptr = head while ptr.next: ptr = ptr.next ptr.next = ListNode(element) return head class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def print_tree(root): if root is not None: print_tree(root.left) print(root.data, end = ', ') print_tree(root.right) class Solution: def solve(self, node): if not node: return None root = TreeNode(node.val) if node.next: if node.next.val < node.val: root.left = self.solve(node.next) else: root.right = self.solve(node.next) return root ob = Solution() L = make_list([2,1,3,4,0,5]) print_tree(ob.solve(L))
Đầu vào
[2,1,3,4,0,5]
Đầu ra
1, 3, 0, 5, 4, 2,