在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:
行数 m 应当等于给定二叉树的高度。
列数 n 应当总是奇数。
根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一个非空,你不需要为空的子树输出任何东西,但仍需要为另一个子树留出足够的空间。然而,如果两个子树都为空则不需要为它们留出任何空间。
每个未使用的空间应包含一个空的字符串""。
使用相同的规则输出子树。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/print-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
9,20 16:40 ~ 17:12
这题目基本思路:
- 先算数的深度,通过深度得到m,n
- 采用广度遍历给m * n矩阵赋值
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def get_max_depth(self,node,d):
if node.left != None:
self.get_max_depth(node.left,d+1)
if d > self.depth:
self.depth = d
if node.right != None:
self.get_max_depth(node.right,d+1)
def print_key(self,node,d,i,j):
mid = (i + j) /2
self.ret[d-1][mid] = str(node.val)
if node.left != None:
self.print_key(node.left,d+1,i,mid-1)
if node.right != None:
self.print_key(node.right,d+1,mid+1,j)
def printTree(self, root):
"""
:type root: TreeNode
:rtype: List[List[str]]
"""
self.depth = 0
self.get_max_depth(root,1)
m = self.depth
n = sum([2**i for i in range(m)])
self.ret = []
for i in range(m):
tmp = []
for j in range(n):
tmp.append("")
self.ret.append(tmp)
self.print_key(root,1,0,n-1)
return self.ret