leetcode-655. 输出二叉树

在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:

行数 m 应当等于给定二叉树的高度。
列数 n 应当总是奇数。
根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一个非空,你不需要为空的子树输出任何东西,但仍需要为另一个子树留出足够的空间。然而,如果两个子树都为空则不需要为它们留出任何空间。
每个未使用的空间应包含一个空的字符串""。
使用相同的规则输出子树。
示例 1:

输入:
     1
    /
   2
输出:
[["", "1", ""],
 ["2", "", ""]]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/print-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
节点在二维数组中的位置由其层数和中序遍历的位置决定
对二叉树中序遍历求出上述两项值即可
class Solution:
    def printTree(self, root: TreeNode) -> List[List[str]]:
        
        def get_level(root):
            if root is None:
                return 0
            return max(get_level(root.left), get_level(root.right)) + 1
        
        nodes = []
        last_index = -1
        max_level = get_level(root)
        def mid_deep(root, level):
            nonlocal max_level
            nonlocal last_index
            if level > max_level:
                return
            if root is None:
                if level < max_level:
                    mid_deep(None, level+1)
                last_index += 1
                nodes.append(("", level, last_index))
                if level < max_level:
                    mid_deep(None, level+1)
                return
            mid_deep(root.left, level+1)
            last_index += 1
            nodes.append((str(root.val), level, last_index))
            mid_deep(root.right, level+1)
        # 计算层数和在数组中位置
        mid_deep(root, 1)
        if len(nodes) <= 0:
            return []
        res = [[""] * (2**max_level-1) for i in range(max_level)]
        # 按照位置放置值
        for node in nodes:
            res[node[1]-1][node[2]] = node[0]
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值