Leetcode 655. Print Binary Tree 두 갈래 트리 문제 풀이 보고서 인쇄
11309 단어 leetcode-java
Print a binary tree in an m*n 2D string array following these rules:
The row number m should be equal to the height of the given binary tree.
The column number n should always be an odd number.
The root node's value (in string format) should be put in the exactly middle of the first row it can be put. The column and the row where the root node belongs will separate the rest space into two parts (left-bottom part and right-bottom part). You should print the left subtree in the left-bottom part and print the right subtree in the right-bottom part. The left-bottom part and the right-bottom part should have the same size. Even if one subtree is none while the other is not, you don't need to print anything for the none subtree but still need to leave the space as large as that for the other subtree. However, if two subtrees are none, then you don't need to leave space for both of them.
Each unused space should contain an empty string "".
Print the subtrees following the same rules.
Example 1:
Input:
1
/
2
Output:
[["", "1", ""],
["2", "", ""]]
Example 2:
Input:
1
/ \
2 3
\
4
Output:
[["", "", "", "1", "", "", ""],
["", "2", "", "", "", "3", ""],
["", "", "4", "", "", "", ""]]
Example 3:
Input:
1
/ \
2 5
/
3
/
4
Output:
[["", "", "", "", "", "", "", "1", "", "", "", "", "", "", ""]
["", "", "", "2", "", "", "", "", "", "", "", "5", "", "", ""]
["", "3", "", "", "", "", "", "", "", "", "", "", "", "", ""]
["4", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]]
Note: The height of binary tree is in the range of [1, 10].
전반적으로 말하면 첫 번째 dfs는 나무의 높이를 얻었고 두 번째 인쇄는 현재 층의 높이에 따라 상응하는 이동 위치를 계산하면 된다.
# 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 printTree(self, root):
"""
:type root: TreeNode
:rtype: List[List[str]]
"""
import math
def dfs(root, h):
if root:
return max(dfs(root.left,h+1), dfs(root.right,h+1))
else :
return h
height = dfs(root, 0)
width = 2 ** height -1
#
res = [ ["" for j in range(width)] for i in range(height)]
# dfs print
def dfs_print(res,root,h,pos):
if root:
res[h - 1][pos] = '%d' % root.val
dfs_print(res, root.left, h+1, pos-2**(height - h - 1))
dfs_print(res, root.right, h+1, pos+2**(height - h - 1))
dfs_print(res,root,1,width/2)
return res
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Leetcode 655. Print Binary Tree 두 갈래 트리 문제 풀이 보고서 인쇄두 갈래 나무에 인쇄를 요구합니다. 즉, 높이*폭의 행렬에서 인쇄하면 됩니다. 각 하위 나무의 루트는 현재 하위 구간의 중간에 인쇄하면 됩니다. 전반적으로 말하면 첫 번째 dfs는 나무의 높이를 얻었고 두 번째 인쇄...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.