Hướng dẫn how do you iterate a binary tree in python? - làm thế nào để bạn lặp lại một cây nhị phân trong python?

Cho đến nay tôi có

def tree_iterate[]:
parent, current = None, self.root
lst = []
while current is not None: 
 if current.left not None:
  lst.append[current.item] 
  parent, current = current, current.left
 if current.right not None:
  lst.append[current.item]
  parent, current = current, current.right

[Xin lỗi về khoảng cách tôi khá mới về điều này]

Tôi không hoàn toàn chắc chắn làm thế nào để lặp lại ở cả hai bên của cây khi dòng điện bên trái và phải, mà không sử dụng đệ quy. Mục tiêu chính của tôi là có một danh sách tất cả các nút trong BSTenter code here này

Đã hỏi ngày 31 tháng 3 năm 2014 lúc 1:55Mar 31, 2014 at 1:55

1

Để có được một danh sách tất cả các nút trong BST lặp đi lặp lại, hãy sử dụng tìm kiếm đầu tiên [BFS]. Lưu ý rằng điều này sẽ không cung cấp cho bạn các nút theo thứ tự được sắp xếp:

queue = [root]
result = []
while queue:
    l = queue.pop[0]
    result.append[l]

    if l.left != None:
        queue.append[l.left]
    if l.right!= None:
        queue.append[l.right]

Nếu bạn muốn các nút theo thứ tự được sắp xếp, bạn sẽ cần mô phỏng việc chuyển đổi hàng đầu bằng cách sử dụng ngăn xếp:

result = []
stack = [root]
while stack:
    stack[-1].visited = True
    if stack[-1].left != None and not stack[-1].left.visited:
        stack.append[stack[-1].left]
    else:
        node = stack.pop[]
        result.append[node]
        if stack[-1].right != None:
            stack.append[stack[-1].right]

Đã trả lời ngày 31 tháng 3 năm 2014 lúc 2:17Mar 31, 2014 at 2:17

spinlokspinlokspinlok

3,48316 Huy hiệu bạc25 Huy hiệu đồng16 silver badges25 bronze badges

Traversal là một quá trình để truy cập tất cả các nút của cây và cũng có thể in các giá trị của chúng. Bởi vì, tất cả các nút được kết nối thông qua các cạnh [liên kết], chúng tôi luôn bắt đầu từ nút gốc [đầu]. Đó là, chúng ta không thể truy cập ngẫu nhiên một nút trong cây. Có ba cách mà chúng ta sử dụng để đi qua một cây -

  • Theo đơn đặt hàng
  • Traversal đặt hàng trước
  • Traversal sau đơn đặt hàng

Theo đơn đặt hàng

Trong phương pháp truyền tải này, cây con bên trái được truy cập trước, sau đó là gốc và sau đó là cây con bên phải. Chúng ta nên luôn luôn nhớ rằng mọi nút có thể đại diện cho chính một cây con.

Trong chương trình Python dưới đây, chúng tôi sử dụng lớp nút để tạo chủ sở hữu vị trí cho nút gốc cũng như các nút trái và bên phải. Sau đó, chúng tôi tạo một chức năng chèn để thêm dữ liệu vào cây. Cuối cùng, logic chuyển đổi hàng đầu được triển khai bằng cách tạo một danh sách trống và thêm nút bên trái trước đó là nút gốc hoặc nút cha. Cuối cùng, nút bên trái được thêm vào để hoàn thành việc chuyển đổi thứ tự. Xin lưu ý rằng quá trình này được lặp lại cho mỗi cây con cho đến khi tất cả các nút được đi qua.

class Node:

    def __init__[self, data]:

        self.left = None
        self.right = None
        self.data = data
# Insert Node
    def insert[self, data]:

        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node[data]
                else:
                    self.left.insert[data]
            elif data > self.data:
                if self.right is None:
                    self.right = Node[data]
                else:
                    self.right.insert[data]
        else:
            self.data = data

# Print the Tree
    def PrintTree[self]:
        if self.left:
            self.left.PrintTree[]
        print[ self.data],
        if self.right:
            self.right.PrintTree[]

# Inorder traversal
# Left -> Root -> Right
    def inorderTraversal[self, root]:
        res = []
        if root:
            res = self.inorderTraversal[root.left]
            res.append[root.data]
            res = res + self.inorderTraversal[root.right]
        return res

root = Node[27]
root.insert[14]
root.insert[35]
root.insert[10]
root.insert[19]
root.insert[31]
root.insert[42]
print[root.inorderTraversal[root]]

Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -

[10, 14, 19, 27, 31, 35, 42]

Traversal đặt hàng trước

Trong phương thức truyền tải này, nút gốc được truy cập trước, sau đó là cây con bên trái và cuối cùng là cây con bên phải.

Trong chương trình Python dưới đây, chúng tôi sử dụng lớp nút để tạo chủ sở hữu vị trí cho nút gốc cũng như các nút trái và bên phải. Sau đó, chúng tôi tạo một chức năng chèn để thêm dữ liệu vào cây. Cuối cùng, logic chuyển đổi trước được triển khai bằng cách tạo một danh sách trống và thêm nút gốc trước đó là nút bên trái. Cuối cùng, nút bên phải được thêm vào để hoàn thành việc chuyển giao trước. Xin lưu ý rằng quá trình này được lặp lại cho mỗi cây con cho đến khi tất cả các nút được đi qua.

class Node:

    def __init__[self, data]:

        self.left = None
        self.right = None
        self.data = data
# Insert Node
    def insert[self, data]:

        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node[data]
                else:
                    self.left.insert[data]
            elif data > self.data:
                if self.right is None:
                    self.right = Node[data]
                else:
                    self.right.insert[data]
        else:
            self.data = data

# Print the Tree
    def PrintTree[self]:
        if self.left:
            self.left.PrintTree[]
        print[ self.data],
        if self.right:
            self.right.PrintTree[]

# Preorder traversal
# Root -> Left ->Right
    def PreorderTraversal[self, root]:
        res = []
        if root:
            res.append[root.data]
            res = res + self.PreorderTraversal[root.left]
            res = res + self.PreorderTraversal[root.right]
        return res

root = Node[27]
root.insert[14]
root.insert[35]
root.insert[10]
root.insert[19]
root.insert[31]
root.insert[42]
print[root.PreorderTraversal[root]]

Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -

[27, 14, 10, 19, 35, 31, 42]

Traversal sau đơn đặt hàng

Trong phương thức truyền tải này, nút gốc được truy cập cuối cùng, do đó tên. Đầu tiên chúng tôi đi qua cây con bên trái, sau đó là cây con bên phải và cuối cùng là nút gốc.

Trong chương trình Python dưới đây, chúng tôi sử dụng lớp nút để tạo chủ sở hữu vị trí cho nút gốc cũng như các nút trái và bên phải. Sau đó, chúng tôi tạo một chức năng chèn để thêm dữ liệu vào cây. Cuối cùng, logic truyền tải sau đơn đặt hàng được triển khai bằng cách tạo một danh sách trống và thêm nút bên trái trước tiên là nút bên phải. Cuối cùng, nút gốc hoặc nút cha được thêm vào để hoàn thành việc chuyển đổi sau đơn đặt hàng. Xin lưu ý rằng quá trình này được lặp lại cho mỗi cây con cho đến khi tất cả các nút được đi qua.

class Node:

    def __init__[self, data]:

        self.left = None
        self.right = None
        self.data = data
# Insert Node
    def insert[self, data]:

        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node[data]
                else:
                    self.left.insert[data]
            elif data > self.data:
                if self.right is None:
                    self.right = Node[data]
                else:
                    self.right.insert[data]
        else:
            self.data = data

# Print the Tree
    def PrintTree[self]:
        if self.left:
            self.left.PrintTree[]
        print[ self.data],
        if self.right:
            self.right.PrintTree[]

# Postorder traversal
# Left ->Right -> Root
    def PostorderTraversal[self, root]:
        res = []
        if root:
            res = self.PostorderTraversal[root.left]
            res = res + self.PostorderTraversal[root.right]
            res.append[root.data]
        return res

root = Node[27]
root.insert[14]
root.insert[35]
root.insert[10]
root.insert[19]
root.insert[31]
root.insert[42]
print[root.PostorderTraversal[root]]

Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -

[10, 19, 14, 31, 42, 35, 27]

Làm thế nào để bạn lặp lại thông qua một cây tìm kiếm nhị phân trong Python?

Làm thế nào để bạn lặp lại thông qua một cây nhị phân ?..
Quy tắc đầu tiên: nút đầu tiên trong cây là nút ngoài cùng bên trái trong cây ..
Quy tắc tiếp theo: Người kế thừa của một nút là: Quy tắc tiếp theo-R: Nếu nó có một cây con bên phải, nút ngoài cùng bên trái trong cây con bên phải. Quy tắc tiếp theo-U: Nếu không, đi qua cây ..

Làm thế nào để bạn lặp lại một cây nhị phân?

Algorithm:..
Nếu hiện tại = null [hoặc hasnext [] trả về false] Ném một ngoại lệ ..
KHÁC. Nếu hiện tại.left = null. Khởi tạo temp = hiện tại. hiện tại = hiện tại.right. trả lại temp. KHÁC. Khởi tạo ngoài cùng bên phải = hiện tại-> trái. trong khi cực tận.right! = null && bên phải. bên phải = ngoài cùng bên phải.right ..

Làm thế nào để bạn điều hướng một cây trong Python?

Bây giờ, có 3 phương pháp chính để đi qua cây trong Python với đệ quy bằng cách sử dụng DFS, đó là: Traversal [trái, gốc, phải] trước khi chuyển đổi hàng đầu [rễ, trái, phải] [trái, phải, root]Inorder Traversal [left, root, right] Preorder Traversal [root, left, right] Postorder Traversal [left, right, root]

Là cây tìm kiếm nhị phân lặp đi lặp lại?

Mã số.Độ phức tạp về thời gian để xóa một nút trong cây tìm kiếm nhị phân bằng cách sử dụng phương pháp lặp sẽ có giá o [n] độ phức tạp thời gian, trong đó 'n' là số lượng nút trong cây tìm kiếm nhị phân.Vì chúng tôi chỉ lặp đi lặp lại một lần trên mỗi nút, nên nó sẽ tiêu tốn độ phức tạp thời gian tuyến tính.iterating only one time on every node, it will cost linear time complexity.

Bài Viết Liên Quan

Chủ Đề