Giả sử chúng ta có một trình duyệt thứ tự của cây tìm kiếm nhị phân; chúng ta phải tìm cây tìm kiếm nhị phân từ nó.
Vì vậy, nếu đầu vào là [6, 12, 10, 55, 45, 15], thì đầu ra sẽ
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Định nghĩa một hàm giải quyết (). Việc này sẽ có đơn đặt hàng sau
-
n:=kích thước của đơn đặt hàng bưu điện
-
root:=tạo một nút cây mới với phần tử cuối cùng của postorder
-
stk:=một ngăn xếp
-
chèn root vào stk
-
i:=n - 2
-
while i> =0, do
-
x:=tạo một nút mới với giá trị postorder [i]
-
trong khi stk không trống và postorder [i]
-
temp:=top of stk
-
xóa phần tử hàng đầu khỏi stk
-
-
nếu tạm thời không null, thì
-
temp.left:=x
-
-
nếu không,
-
bên phải của phần tử trên cùng của stk:=x
-
-
chèn x vào stk
-
i:=i - 1
-
-
trả về thư mục gốc
-
Từ phương thức chính, hãy làm như sau -
-
trả lại giải quyết (đơn đặt hàng sau)
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
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 = [] stk.append(root) i = n - 2 while ( i >= 0): x = TreeNode(postorder[i]) temp = None while (len(stk) > 0 and postorder[i] < stk[-1].val) : temp = stk[-1] stk.pop() if (temp != None): temp.left = x else: stk[-1].right = x stk.append(x) i = i - 1 return root def build_tree(postorder): return solve(postorder) def inord( node): if node: inord(node.left) print( node.val, end = " ") inord(node.right) postorder = [6, 12, 10, 55, 45, 15] root = build_tree(postorder) print( "Inorder traversal:", end = " ") inord(root)
Đầu vào
[6, 12, 10, 55, 45, 15]
Đầu ra
6 10 12 15 45 55