Leetcode 655. Print Binary Tree 打印二叉树 解题报告
2017-08-15 22:03
513 查看
给一个二叉树,要求进行打印,也就是在一个高度*宽度的矩阵里面打印就好了,每个子树的root打印在当前子区间的中间就好了
总的来说就是,第一次dfs获得树的高度,第二次打印,注意根据当前层高计算相应的移动位置就可以了
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
相关文章推荐
- Leetcode 114. Flatten Binary Tree to Linked List 二叉树到链表 解题报告
- Leetcode 107. Binary Tree Level Order Traversal II 二叉树层次遍历2 解题报告
- leetCode解题报告之Binary Tree Level Order Traversal II,I(二叉树层次遍历)
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 先序和中序中恢复二叉树 解题报告
- leetcode解题之103. Binary Tree Zigzag Level Order Traversal java版(之字形打印二叉树)
- Leetcode 102. Binary Tree Level Order Traversal 二叉树按层遍历 解题报告
- Leetcode 103. Binary Tree Zigzag Level Order Traversal 二叉树Zigzag遍历 解题报告
- Leetcode 104. Maximum Depth of Binary Tree 二叉树的最大高度 解题报告
- 剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告
- Leetcode 654. Maximum Binary Tree 最大二叉树 解题报告
- leetCode解题报告之构造二叉树(递归)
- LeetCode-Best Time to Buy and Sell Stock-解题报告
- [leetcode] 260. Single Number III 解题报告
- 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
- [Leetcode] 269. Alien Dictionary 解题报告
- LeetCode82 Remove Duplicates from Sorted List II 解题报告
- LeetCode: 【L4】N-Queens 解题报告
- [Leetcode] 442. Find All Duplicates in an Array 解题报告
- [leetcode] 215. Kth Largest Element in an Array 解题报告
- LeetCode-Binary Tree Level Order Traversal-解题报告