华为OD机试题


■ 题目描述
【二叉树中序遍历】
根据给定的二叉树结构描述字符串,输出该二叉树按照中序遍历结果字符串。中序遍历顺序为:左子树,根结点,右子树。
输入描述
由大小写字母、左右大括号、逗号组成的字符串:字母代表一个节点值,左右括号内包含该节点的子节点。
左右子节点使用逗号分隔,逗号前为空则表示左子节点为空,没有逗号则表示右子节点为空。
二叉树节点数最大不超过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)

  


posted @ 2022-07-12 09:50  莫大师兄  阅读(945)  评论(0)    收藏  举报