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

สร้างสตริงจากต้นไม้ไบนารีใน Python


สมมติว่าเรามีไบนารีทรี เราต้องสร้างสตริงที่ประกอบด้วยวงเล็บและจำนวนเต็มจากไบนารีทรีที่มีวิธีการสั่งซื้อล่วงหน้า โหนด null จะแสดงด้วยวงเล็บที่ว่างเปล่า "()" และเราจำเป็นต้องละเว้นวงเล็บว่างทั้งหมดที่ไม่ส่งผลต่อความสัมพันธ์การแมปแบบหนึ่งต่อหนึ่งระหว่างสตริงกับไบนารีทรีเดิม

ดังนั้นหากอินพุตเป็นแบบ

สร้างสตริงจากต้นไม้ไบนารีใน Python

จากนั้นผลลัพธ์จะเป็น 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)