ภาพรวม
โจทย์สร้าง Binary Search Tree (BST) จาก postorder traversal sequence โดยใช้ Stack (Iterative approach)
ตัวอย่าง
Postorder: [6, 12, 10, 55, 45, 15]
BST ที่ได้ (Inorder): 6 10 12 15 45 55
อัลกอริทึม Stack-based
- ราก = ตัวสุดท้ายของ postorder (15)
- Push root ลง stack
- เดิน postorder จากท้ายไปหน้า (i = n-2 downto 0):
- สร้างโหนดใหม่ x = postorder[i]
- Pop stack จนกว่า top < x (เจอ parent ที่ x เป็น right child)
- ถ้า pop ไปแล้วมี temp → x เป็น left child ของ temp
- ถ้าไม่ pop → x เป็น right child ของ stack top
- Push x ลง stack
โค้ด Python
class TreeNode:
def __init__(self, data=0):
self.val = data
self.left = None
self.right = None
def solve(postorder):
n = len(postorder)
root = TreeNode(postorder[n - 1])
stk = [root]
i = n - 2
while i >= 0:
x = TreeNode(postorder[i])
temp = None
while stk and postorder[i] < stk[-1].val:
temp = stk.pop()
if temp:
temp.left = x
else:
stk[-1].right = x
stk.append(x)
i -= 1
return root
def inord(node):
if node:
inord(node.left)
print(node.val, end=" ")
inord(node.right)
postorder = [6, 12, 10, 55, 45, 15]
root = solve(postorder)
print("Inorder traversal:", end=" ")
inord(root)
ผลลัพธ์
6 10 12 15 45 55