#ㅤcoding=utf-8
classㅤBinTreeNode:
ㅤㅤㅤㅤdefㅤ__init__(self,ㅤvalue=None):
ㅤㅤㅤㅤㅤㅤㅤㅤself.valueㅤ=ㅤvalue
ㅤㅤㅤㅤㅤㅤㅤㅤself.leftㅤ=ㅤNone
ㅤㅤㅤㅤㅤㅤㅤㅤself.rightㅤ=ㅤNone
ㅤㅤㅤㅤㅤㅤㅤㅤself.parentㅤ=ㅤNone
ㅤㅤㅤㅤdefㅤaddLeft(self,ㅤnode):
ㅤㅤㅤㅤㅤㅤㅤㅤself.leftㅤ=ㅤnode
ㅤㅤㅤㅤㅤㅤㅤㅤnode.parentㅤ=ㅤself
ㅤㅤㅤㅤdefㅤaddRight(self,ㅤnode):
ㅤㅤㅤㅤㅤㅤㅤㅤself.rightㅤ=ㅤnode
ㅤㅤㅤㅤㅤㅤㅤㅤnode.parentㅤ=ㅤself
ㅤㅤㅤㅤdefㅤ__str__(self):
ㅤㅤㅤㅤㅤㅤㅤㅤstrNodeㅤ=ㅤ"v[%d]"ㅤ%ㅤself.value
ㅤㅤㅤㅤㅤㅤㅤㅤifㅤself.leftㅤisㅤnotㅤNone:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤstrNodeㅤ+=ㅤ"ㅤl[%d]"ㅤ%ㅤself.left.value
ㅤㅤㅤㅤㅤㅤㅤㅤifㅤself.rightㅤisㅤnotㅤNone:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤstrNodeㅤ+=ㅤ"ㅤr[%d]"ㅤ%ㅤself.right.value
ㅤㅤㅤㅤㅤㅤㅤㅤreturnㅤstrNode
classㅤStack:
ㅤㅤㅤㅤdefㅤ__init__(self):
ㅤㅤㅤㅤㅤㅤㅤㅤself.listㅤ=ㅤ[]
ㅤㅤㅤㅤdefㅤpush(self,ㅤdata):
ㅤㅤㅤㅤㅤㅤㅤㅤself.list.append(data)
ㅤㅤㅤㅤdefㅤpop(self):
ㅤㅤㅤㅤㅤㅤㅤㅤdataㅤ=ㅤself.list[-1]
ㅤㅤㅤㅤㅤㅤㅤㅤself.list.pop(-1)
ㅤㅤㅤㅤㅤㅤㅤㅤreturnㅤdata
ㅤㅤㅤㅤdefㅤtop(self):
ㅤㅤㅤㅤㅤㅤㅤㅤifㅤself.empty():
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤreturnㅤNone
ㅤㅤㅤㅤㅤㅤㅤㅤelse:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤreturnㅤself.list[-1]
ㅤㅤㅤㅤdefㅤempty(self):
ㅤㅤㅤㅤㅤㅤㅤㅤreturnㅤlen(self.list)ㅤ==ㅤ0
classㅤBinTreeParser:
ㅤㅤㅤㅤdefㅤ__init__(self,ㅤs):
ㅤㅤㅤㅤㅤㅤㅤㅤself.inStrㅤ=ㅤs
ㅤㅤㅤㅤㅤㅤㅤㅤself.lenStrㅤ=ㅤlen(s)
ㅤㅤㅤㅤㅤㅤㅤㅤself.idxStrㅤ=ㅤ0
ㅤㅤㅤㅤㅤㅤㅤㅤself.rootㅤ=ㅤNone
ㅤㅤㅤㅤㅤㅤㅤㅤself.symbolicㅤ=ㅤ0ㅤㅤ#ㅤ0:num,ㅤ1:openParen,ㅤ2:comma,ㅤ3:closeParen
ㅤㅤㅤㅤdefㅤparseSymbolic(self):
ㅤㅤㅤㅤㅤㅤㅤㅤifㅤself.inStr[self.idxStr]ㅤ==ㅤ'(':
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤself.symbolicㅤ=ㅤ1
ㅤㅤㅤㅤㅤㅤㅤㅤelifㅤself.inStr[self.idxStr]ㅤ==ㅤ',':
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤself.symbolicㅤ=ㅤ2
ㅤㅤㅤㅤㅤㅤㅤㅤelifㅤself.inStr[self.idxStr]ㅤ==ㅤ')':
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤself.symbolicㅤ=ㅤ3
ㅤㅤㅤㅤㅤㅤㅤㅤelse:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤnumㅤ=ㅤ0
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤwhileㅤ'0'ㅤ<=ㅤself.inStr[self.idxStr]ㅤ<=ㅤ'9':
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤnumㅤ*=ㅤ10
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤnumㅤ+=ㅤint(self.inStr[self.idxStr])ㅤ-ㅤint('0')
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤself.idxStrㅤ+=ㅤ1
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤself.symbolicㅤ=ㅤ0
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤreturnㅤnum
ㅤㅤㅤㅤㅤㅤㅤㅤifㅤself.symbolicㅤ!=ㅤ0:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤself.idxStrㅤ+=ㅤ1
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤreturnㅤ0
ㅤㅤㅤㅤdefㅤparse(self):
ㅤㅤㅤㅤㅤㅤㅤㅤrootStackㅤ=ㅤStack()
ㅤㅤㅤㅤㅤㅤㅤㅤcurRootㅤ=ㅤNone
ㅤㅤㅤㅤㅤㅤㅤㅤcurNodeㅤ=ㅤNone
ㅤㅤㅤㅤㅤㅤㅤㅤstateㅤ=ㅤ0
ㅤㅤㅤㅤㅤㅤㅤㅤwhileㅤself.idxStrㅤ<ㅤself.lenStr:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤnumㅤ=ㅤself.parseSymbolic()
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤifㅤself.symbolicㅤ==ㅤ0:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤcurNodeㅤ=ㅤBinTreeNode(num)
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤifㅤstateㅤ==ㅤ1:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤcurRoot.addLeft(curNode)
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤelifㅤstateㅤ==ㅤ2:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤcurRoot.addRight(curNode)
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤelifㅤself.symbolicㅤ==ㅤ1:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤstateㅤ=ㅤ1
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤrootStack.push(curNode)
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤcurRootㅤ=ㅤcurNode
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤifㅤself.rootㅤisㅤNone:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤself.rootㅤ=ㅤcurRoot
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤelifㅤself.symbolicㅤ==ㅤ2:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤstateㅤ=ㅤ2
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤelifㅤself.symbolicㅤ==ㅤ3:
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤrootStack.pop()
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤcurRootㅤ=
ㅤrootStack.top()
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤstateㅤ=ㅤ3
#ㅤexample:ㅤ'100(200(300,400(,500)),600(700,))'
ifㅤ__name__ㅤ==ㅤ'__main__':
ㅤㅤㅤㅤinStrㅤ=ㅤinput("输入要转换的字符串:")
ㅤㅤㅤㅤparserㅤ=ㅤBinTreeParser(inStr)
ㅤㅤㅤㅤparser.parse()
ㅤㅤㅤㅤprint("pause")
#