Help me figure out how to build a binary tree in Python 3 in a bracket record?
The structure of the binary tree is as follows:
< Π±Π΄ > ::= < ΠΏΡΡΡΠΎ > | (< Π±Π΄ > < Π±ΡΠΊΠ²Π° >< Π±Π΄ >) < ΠΏΡΡΡΠΎ > ::= And here is an example corresponding to this structure (B(C))A(D) . In this case, A is the root of the tree.
At the moment, it turned out to make a procedure that extracts all the letters from the bracket entry (of course, it looks pretty crooked), but itβs impossible to build a tree.
The code itself:
class Node: def __init__(self, data=None, left=None, right=None): self.left = left self.right = right self.data = data class Tree: def __init__(self): self.root = None def myAdd(self, node, data, key): if key == None: node = Node(data) if key == 'left': node.left = Node(data) if key == 'right': node.right = Node(data) def addToTree(self, expression): self._addToTree(expression, self.root) # ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΠΎΠΊΠΈ Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΡΠΊΠ² def _addToTree(self, expression, node, key=None): if expression: if len(expression) == 1: self.myAdd(node, expression[0], key) else: brackets = 0 index_sym = 0 expression = list(''.join(expression)) for inx, sym in enumerate(expression): if sym == '(': brackets += 1 if sym == ')': brackets -= 1 if (sym != '(') and (sym != ')'): index_sym = inx if (brackets == 0) and (sym != ')') and (sym != '('): index_sym = inx break self._addToTree(expression[index_sym], node ) self._addToTree(expression[1:index_sym], node, 'left') self._addToTree(expression[index_sym+2:-1], node, 'right') def printTree(self): if (self.root != None): self._printTree(self.root) def _printTree(self, node): if (node != None): self._printTree(node.left) print( str(node.data), end= ' ' ) self._printTree(node.right) tree = Tree() tree.addToTree('((c)b(d))a(((g)f(h))e)') tree.printTree()