题解 | #从中序与后序遍历序列构造二叉树#

从中序与后序遍历序列构造二叉树

https://www.nowcoder.com/practice/ab8dde7f01f3440fbbb7993d2411a46b

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param inorder int整型一维数组 中序遍历序列
# @param postorder int整型一维数组 后序遍历序列
# @return TreeNode类
#
class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
        if not inorder or not postorder:
            return None

        # 后序遍历的最后一个元素为根节点
        root_val = postorder[-1]
        root = TreeNode(root_val)

        # 在中序遍历中找到根节点的位置
        inorder_index = inorder.index(root_val)

        # 递归构建左子树和右子树
        root.left = self.buildTree(inorder[:inorder_index], postorder[:inorder_index])
        root.right = self.buildTree(
            inorder[inorder_index + 1 :], postorder[inorder_index:-1]
        )

        return root

    # 层次遍历二叉树并转化为形式化字符串


    def treeToString(root):
        if not root:
            return "{}"

        result = []
        queue = [root]

        while queue:
            node = queue.pop(0)
            if node:
                result.append(str(node.val))
                queue.append(node.left)
                queue.append(node.right)
            else:
                result.append("#")

        # 去掉末尾多余的'#'
        while result[-1] == "#":
            result.pop()

        return "{" + ",".join(result) + "}"

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务