给你一棵二叉树的根节点 root ,请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res ,用以表示树的 格式化布局 。构造此格式化布局矩阵需要遵循以下规则:
height ,矩阵的行数 m 应该等于 height + 1 。n 应该等于 2height+1 - 1 。res[0][(n-1)/2] 。res[r][c] ,将其左子节点放置在 res[r+1][c-2height-r-1] ,右子节点放置在 res[r+1][c+2height-r-1] 。"" 。返回构造得到的矩阵 res 。
示例 1:

输入:root = [1,2]
输出:
[["","1",""],
["2","",""]]
示例 2:

输入:root = [1,2,3,null,4]
输出:
[["","","","1","","",""],
["","2","","","","3",""],
["","","4","","","",""]]
提示:
[1, 210] 内-99 <= Node.val <= 99[1, 10] 内
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def printTree(self, root: Optional[TreeNode]) -> List[List[str]]:
def depth(node: Optional[TreeNode]):
if not node: return 0
return max(depth(node.left), depth(node.right))+1
height = depth(root)-1
ret = [[""]*(2**(height+1)-1) for _ in range(height+1)]
def recur(node: Optional[TreeNode], r1:int, c1: int, r2: int, c2: int):
if not node: return
ret[r1][(c1+c2)//2] = str(node.val)
recur(node.left, r1+1,c1,r2,(c1+c2)//2-1)
recur(node.right, r1+1,(c1+c2)//2+1,r2,c2)
recur(root, 0,0, len(ret), len(ret[0]))
return ret
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def printTree(self, root: Optional[TreeNode]) -> List[List[str]]:
def depth(node: Optional[TreeNode]):
return max(depth(node.left), depth(node.right))+1 if node else 0
height = depth(root)-1
ret = [[""]*(2**(height+1)-1) for _ in range(height+1)]
def dfs(node: Optional[TreeNode], r: int, c: int):
if not node: return
ret[r][c] = str(node.val)
dfs(node.left, r+1, c-2**(height-r-1))
dfs(node.right, r+1, c+2**(height-r-1))
dfs(root, 0, (2**(height+1)-2)//2)
return ret
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def printTree(self, root: Optional[TreeNode]) -> List[List[str]]:
def depth(node: Optional[TreeNode]):
return max(depth(node.left), depth(node.right))+1 if node else 0
height = depth(root)-1
ret = [[""]*(2**(height+1)-1) for _ in range(height+1)]
queue = collections.deque([(root, 0, (2**(height+1)-2)//2)])
while queue:
node, r, c = queue.popleft()
ret[r][c] = str(node.val)
if node.left: queue.append((node.left, r+1, c-2**(height-r-1)))
if node.right: queue.append((node.right, r+1, c+2**(height-r-1)))
return ret