■ 题目描述
【二叉树中序遍历】
根据给定的二叉树结构描述字符串,输出该二叉树按照中序遍历结果字符串。中序遍历顺序为:左子树,根结点,右子树。
输入描述
由大小写字母、左右大括号、逗号组成的字符串:字母代表一个节点值,左右括号内包含该节点的子节点。
左右子节点使用逗号分隔,逗号前为空则表示左子节点为空,没有逗号则表示右子节点为空。
二叉树节点数最大不超过100。
注:输入字符串格式是正确的,无需考虑格式错误的情况。
输出描述
输出一个字符串为二叉树中序遍历各节点值的拼接结果。
示例 1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
a{b{d,e{g,h{,I}}},c{f}}
输出
dbgehiafc
class Node:
def __init__(self,val):
self.val = val
self.left = None
self.right = None
def __str__(self):
return self.val
def DFS(node:Node):
if node == None:
return
DFS(node.left)
print(node.val)
DFS(node.right)
def solution(s:str,):
root = Node(s[0])
tmp = root
stack = []
for i in range(1,len(s)):
if s[i] == "{" and s[i + 1] != "," and s[i + 2] == "{":
tmp.left = Node(s[i + 1])
stack.append(tmp)
tmp = tmp.left
elif s[i] == "{" and s[i + 1] != "," and s[i + 2] == ",":
tmp.left = Node(s[i + 1])
elif s[i] == "{" and s[i + 1] != "," and s[i + 2] == "}":
tmp.left = Node(s[i + 1])
elif s[i-1] =="," and s[i+1] =="{":
tmp.right = Node(s[i])
stack.append(tmp)
tmp = tmp.right
elif s[i-1] =="," and s[i+1] =="}":
tmp.right = Node(s[i])
tmp = stack.pop()
elif s[i-1] =="}" and s[i] =="}":
tmp = stack.pop()
DFS(root)