首页 技术 正文
技术 2022年11月6日
0 收藏 573 点赞 853 浏览 1692 个字

655. 输出二叉树

在一个 m*n 的二维字符串数组中输出二叉树,并遵守以下规则:

行数 m 应当等于给定二叉树的高度。

列数 n 应当总是奇数。

根节点的值(以字符串格式给出)应当放在可放置的第一行正中间。根节点所在的行与列会将剩余空间划分为两部分(左下部分和右下部分)。你应该将左子树输出在左下部分,右子树输出在右下部分。左下和右下部分应当有相同的大小。即使一个子树为空而另一个非空,你不需要为空的子树输出任何东西,但仍需要为另一个子树留出足够的空间。然而,如果两个子树都为空则不需要为它们留出任何空间。

每个未使用的空间应包含一个空的字符串””。

使用相同的规则输出子树。

示例 1:

输入:
1
/
2
输出:
[["", "1", ""],
["2", "", ""]]

示例 2:

输入:
1
/ \
2 3
\
4
输出:
[["", "", "", "1", "", "", ""],
["", "2", "", "", "", "3", ""],
["", "", "4", "", "", "", ""]]

示例 3:

输入:
1
/ \
2 5
/
3
/
4
输出:
[["", "", "", "", "", "", "", "1", "", "", "", "", "", "", ""]
["", "", "", "2", "", "", "", "", "", "", "", "5", "", "", ""]
["", "3", "", "", "", "", "", "", "", "", "", "", "", "", ""]
["4", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]]

注意: 二叉树的高度在范围 [1, 10] 中。

PS:

先判断数组大小

DFS+二分填充

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<String>> printTree(TreeNode root) {
if (root == null) {
return new ArrayList<>(1);
}
//先获取数组大小
int depth = getDepth(root);
int width = (int)(Math.pow(2, depth) - 1);
width = width > 0 ? width : 1;
String[][] result = new String[depth][width];
List<List<String>> res = new LinkedList<>();
//填充操作
fill(result, 0, 0, width - 1, root);
for (int i = 0; i < result.length; i++) {
LinkedList<String> linkedList = new LinkedList<>();
for (int j = 0; j < result[i].length; j++) {
if (result[i][j] == null) {
linkedList.add("");
} else {
linkedList.add(result[i][j]);
}
}
res.add(linkedList);
}
return res;
} public void fill(String[][] ints, int depth, int start, int end, TreeNode node) {
if (node == null) {
return;
}
int mid = (start + end) / 2;
ints[depth][mid] = String.valueOf(node.val);
fill(ints, depth + 1, start, mid - 1, node.left);
fill(ints, depth + 1, mid + 1, end, node.right);
} public int getDepth(TreeNode root) {
if (root == null) {
return 0;
}
int left = getDepth(root.left) + 1;
int right = getDepth(root.right) + 1;
return right > left ? right : left;
}
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,084
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,559
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,408
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,181
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,818
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,901