/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<String>> printTree(TreeNode root) {
int height = height(root);
int m = height + 1;
int n = (1 << m) - 1;
List<List<String>> res = new ArrayList<>();
for (int i = 0; i < m; i++){
List<String> temp = new ArrayList<>();
for (int j = 0; j < n; j++){
temp.add("");
}
res.add(temp);
}
dfs(root, res, 0, (n - 1) / 2, height);
return res;
}
// 获取树的高度
private int height(TreeNode root){
int h = 0;
if (root.left != null){
h = Math.max(h, height(root.left) + 1);
}
if (root.right != null){
h = Math.max(h, height(root.right) + 1);
}
return h;
}
// 填充结果
private void dfs(TreeNode node, List<List<String>> res, int row, int mid, int height){
res.get(row).set(mid, Integer.toString(node.val));
if (node.left != null){
dfs(node.left, res, row + 1, mid - (1 << (height - row - 1)), height);
}
if (node.right != null){
dfs(node.right, res, row + 1, mid + (1 << (height - row - 1)), height);
}
}
}
力扣:655. 输出二叉树
于 2022-08-22 23:03:35 首次发布