สมมติว่าเรามีไบนารีทรี เราต้องสร้างสตริงที่ประกอบด้วยวงเล็บและจำนวนเต็มจากไบนารีทรีที่มีวิธีการสั่งซื้อล่วงหน้า โหนด null จะแสดงด้วยวงเล็บที่ว่างเปล่า "()" และเราจำเป็นต้องละเว้นวงเล็บว่างทั้งหมดที่ไม่ส่งผลต่อความสัมพันธ์การแมปแบบหนึ่งต่อหนึ่งระหว่างสตริงกับไบนารีทรีเดิม
ดังนั้นหากอินพุตเป็นแบบ
จากนั้นผลลัพธ์จะเป็น 5(6()(8))(7)
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ตอบ :=สตริงว่าง
- กำหนดฟังก์ชัน pot() สิ่งนี้จะใช้โหนด s
- ถ้าเป็นโมฆะ
- คืนค่าสตริงว่าง
- ถ้าด้านซ้ายหรือด้านขวาของโหนดเป็นโมฆะ
- ส่งคืน node.data
- ss :=node.data
- ถ้า node.left ไม่ใช่ null แล้ว
- ss :=ss concatenate '(' concatenate pot(node.left, blank string) concatenate ')'
- มิฉะนั้น
- ss :=ss concatenate '()'
- ถ้า node.right ไม่เป็นโมฆะ
- ss :=ss concatenate '(' concatenate pot(node.right, blank string) concatenate ')'
- ส่งคืน ss
- จากวิธีหลัก ให้ทำดังนี้ -
- คืนหม้อ(t, สตริงว่าง)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree class Solution: def tree2str(self, t: TreeNode): ans = '' def pot(node, s): if node == None or node.data == 0: return '' if node.left == node.right == None: return str(node.data) ss = str(node.data) if node.left != None: ss = ss + '(' + pot(node.left, '') + ')' else: ss = ss + '()' if node.right != None: ss = ss + '(' + pot(node.right, '') + ')' return ss return pot(t, '') ob = Solution() root = make_tree([5,6,7,None,8]) print(ob.tree2str(root))
อินพุต
[5,6,7,None,8]
ผลลัพธ์
5(6()(8))(7)