输出二叉树

在一个 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] 中。

 public class Solution {
public List<List<String>> printTree(TreeNode root) {
int height = getHeight(root);
String[][] res = new String[height][(1 << height) - 1];
for(String[] arr:res)
Arrays.fill(arr,"");
List<List<String>> ans = new ArrayList<>();
fill(res, root, 0, 0, res[0].length);
for(String[] arr:res)
ans.add(Arrays.asList(arr));
return ans;
}
public void fill(String[][] res, TreeNode root, int i, int l, int r) {
if (root == null)
return;
res[i][(l + r) / 2] = "" + root.val;
fill(res, root.left, i + 1, l, (l + r) / 2);
fill(res, root.right, i + 1, (l + r + 1) / 2, r);
}
public int getHeight(TreeNode root) {
if (root == null)
return 0;
return 1 + Math.max(getHeight(root.left), getHeight(root.right));
}
}

最新文章

  1. React业务实践
  2. python内置数据类型-字典和列表的排序 python BIT sort——dict and list
  3. IOS学习笔记之关键词@dynamic
  4. asp.net 项目在 IE 11 下出现 “__doPostBack”未定义 的解决办法
  5. (转)innerHTML、innerText和outerHTML、outerText的区别
  6. php PDO连接数据库
  7. SDcard进行文件的读取
  8. 联系博主(推介联系QQ)
  9. 在后台直接调用sql
  10. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(30)-本地化(多语言)
  11. 在win2008 r2主域控制域上打开“组策略管理”报错“未打开组策略对对象。你可能没有合适的权限”
  12. 《转》Linux下的多线程编程
  13. 关于Unicode字符集
  14. java计算某个日期是什么节气(24节气)
  15. eclipse导入新项目后,运行时找不到主类解决办法
  16. C++对象模型(二):The Semantics of Copy Constructors(拷贝构造函数之编译背后的行为)
  17. 小甲鱼Python第八讲课后习题
  18. leetcode — remove-nth-node-from-end-of-list
  19. 记录一则FGA审计“A用户对B用户某张表的更新操作”需求
  20. js中去掉字符串的空格、回车换行

热门文章

  1. C# 字符串转组件名、变量名
  2. linux 命令——47 iostat (转)
  3. Incorrect key file for table &#39;./xx_db/xx_table.MYI&#39;; try to repair it
  4. 国产中标麒麟Linux部署dotnet core 环境并运行项目 (三) 部署运行WEB API项目
  5. servlet从服务器磁盘文件读出到浏览器显示,中文乱码问题,不要忘记在输入流和输出流都要设置编码格式,否则一个地方没设置不统一就会各种乱码
  6. 前端-带header和footer的双栏布局
  7. cookie 和 localStorage 、sessionStorage、 session不同
  8. ajax 的 promise
  9. 第28题:leetcode101:Symmetric Tree对称的二叉树
  10. CentOS6 x86_64最小化安装优化脚本