Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

สร้าง BST จาก Postorder Traversal ใน Python

ภาพรวม

โจทย์สร้าง BST จาก postorder traversal โดยใช้ข้อเท็จจริงว่า Inorder ของ BST = sorted(postorder)

ตัวอย่าง

Postorder: [3, 9, 20, 15, 7]

Inorder (sorted): [3, 7, 9, 15, 20]

Tree ที่ได้ (Inorder print): 3, 7, 9, 15, 20

โค้ด Python

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:
        print_tree(root.left)
        print(root.data, end=', ')
        print_tree(root.right)

class Solution:
    def buildTree(self, inorder, postorder):
        if inorder:
            root = TreeNode(postorder.pop())
            ind = inorder.index(root.data)
            root.right = self.buildTree(inorder[ind+1:], postorder)
            root.left = self.buildTree(inorder[:ind], postorder)
            return root

ob1 = Solution()
postorder = [3, 9, 20, 15, 7]
inorder = sorted(postorder)
print_tree(ob1.buildTree(inorder, postorder))

ความแตกต่างจาก Binary Tree ทั่วไป

  • Binary Tree: ต้องให้ inorder และ postorder ทั้งคู่
  • BST: ให้ postorder เพียงอย่างเดียว เพราะ inorder = sorted(postorder) เสมอ

ผลลัพธ์

3, 7, 9, 15, 20,