1. 程式人生 > >Leetcode 655.輸出二叉樹

Leetcode 655.輸出二叉樹

arrays white print nbsp ans [] == mage pan

輸出二叉樹

在一個 m*n 的二維字符串數組中輸出二叉樹,並遵守以下規則:

  1. 行數 m 應當等於給定二叉樹的高度。
  2. 列數 n 應當總是奇數。
  3. 根節點的值(以字符串格式給出)應當放在可放置的第一行正中間。根節點所在的行與列會將剩余空間劃分為兩部分(左下部分和右下部分)。你應該將左子樹輸出在左下部分,右子樹輸出在右下部分。左下和右下部分應當有相同的大小。即使一個子樹為空而另一個非空,你不需要為空的子樹輸出任何東西,但仍需要為另一個子樹留出足夠的空間。然而,如果兩個子樹都為空則不需要為它們留出任何空間。
  4. 每個未使用的空間應包含一個空的字符串""。
  5. 使用相同的規則輸出子樹。

示例 1:

輸入:

技術分享圖片

輸出:

[["", "1", ""],

["2", "", ""]]

示例 2:

輸入:

技術分享圖片

輸出:

[["", "", "", "1", "", "", ""],

["", "2", "", "", "", "3", ""],

["", "", "4", "", "", "", ""]]

示例 3:

輸入:

技術分享圖片

輸出:

[["", "", "", "", "", "", "", "1", "", "", "", "", "", "", ""]

["", "", "", "2", "", "", "", "", "", "", "", "5", "", "", ""]

["", "3", "", "", "", "", "", "", "", "", "", "", "", "", ""]

["4", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]]

註意: 二叉樹的高度在範圍 [1, 10] 中。

技術分享圖片

 1 public class Solution {
 2     public List<List<String>> printTree(TreeNode root) {
 3         int height = getHeight(root);
 4
String[][] res = new String[height][(1 << height) - 1]; 5 for(String[] arr:res) 6 Arrays.fill(arr,""); 7 List<List<String>> ans = new ArrayList<>(); 8 fill(res, root, 0, 0, res[0].length); 9 for(String[] arr:res) 10 ans.add(Arrays.asList(arr)); 11 return ans; 12 } 13 public void fill(String[][] res, TreeNode root, int i, int l, int r) { 14 if (root == null) 15 return; 16 res[i][(l + r) / 2] = "" + root.val; 17 fill(res, root.left, i + 1, l, (l + r) / 2); 18 fill(res, root.right, i + 1, (l + r + 1) / 2, r); 19 } 20 public int getHeight(TreeNode root) { 21 if (root == null) 22 return 0; 23 return 1 + Math.max(getHeight(root.left), getHeight(root.right)); 24 } 25 }

技術分享圖片

Leetcode 655.輸出二叉樹