• 【二叉树】输出二叉树


    题目描述

    给你一棵二叉树的根节点 root ,请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res ,用以表示树的 格式化布局 。构造此格式化布局矩阵需要遵循以下规则:

    • 树的 高度 为 height ,矩阵的行数 m 应该等于 height + 1 。
    • 矩阵的列数 n 应该等于 2height+1 - 1 。
    • 根节点 需要放置在 顶行 的 正中间 ,对应位置为 res[0][(n-1)/2] 。
    • 对于放置在矩阵中的每个节点,设对应位置为 res[r][c] ,将其左子节点放置在 res[r+1][c-2height-r-1] ,右子节点放置在 res[r+1][c+2height-r-1] 。
    • 继续这一过程,直到树中的所有节点都妥善放置。
    • 任意空单元格都应该包含空字符串 "" 。

    返回构造得到的矩阵 res 。

    示例 1:

    输入:root = [11,12,13,null,14]
    输出:
    [["","","","11","","",""],
     ["","12","","","","13",""],
     ["","","14","","","",""]]

    解题思路

    这道题主要是如何层序遍历二叉树,并且按照要求排列数字;

    • 第一步,层序遍历,由于要考虑NULL情况,所以如果遇到NULL情况需要重新构造一个TreeNode;
    • 第二步,根据深度,获取每层:int size = (int) Math.pow(2, res.size()) - 1;
    • 第三步,构造按照题目要求构造结果。

    如图:

    将原来的树可以按照上述图示进行转换,这里我使用Integer.MIN_VALUE表示null;并且定义成 int none = Integer.MIN_VALUE;

    第一步,使用BFS做层序遍历,最终遍历结果,[11], [12,13],[none,14,none,none];

    第二步,计算每层的长度,上述总共3层,最后一层在每个元素中间需要使用空字符串填充,那么就是:元素数量 * 2 - 1;根据二叉树的性质:最后一层元素数量=(int) Math.pow(2, res.size()-1);最终换算成:(int) Math.pow(2, res.size()) - 1;

    第三步,每一层需要填充空字符,参考下图:

    如果是三层,效果如下:

    如果是四层,效果如下:

    最终效果如下:

    总共4层:

    第4层间隔:2的(4-4)次方 - 1 = 0

    第3层间隔:2的(4-3)次方 - 1 = 1

    第2层间隔:2的(4-2)次方 - 1 = 3

    第1层间隔:   2的(4-1)次方 - 1 = 7

     

    for (int i = 0; i < res.size(); i++) {
        List l = new ArrayList<>(size);
        r.add(l);
    
        List list = res.get(i);
        
        int v = (int) Math.pow(2, res.size()-i-1) - 1;
    
        for(int j=0;j

    代码实现

    1. import org.example.TreeNode;
    2. import java.util.ArrayList;
    3. import java.util.Deque;
    4. import java.util.LinkedList;
    5. import java.util.List;
    6. class Solution1 {
    7. int none = Integer.MIN_VALUE;
    8. public List> printTree(TreeNode root) {
    9. List> res = new ArrayList<>();
    10. Deque deque = new LinkedList<>();
    11. if (root != null) {
    12. deque.offer(root);
    13. }
    14. int countNotNull = deque.size();
    15. while (countNotNull != 0) {
    16. int sz = deque.size();
    17. List list = new ArrayList<>();
    18. countNotNull = 0;
    19. for (int i = 0; i < sz; i++) {
    20. TreeNode node = deque.poll();
    21. list.add((node.val));
    22. if (node.left != null) {
    23. deque.offer(node.left);
    24. countNotNull++;
    25. } else {
    26. deque.offer(new TreeNode(none));
    27. }
    28. if (node.right != null) {
    29. deque.offer(node.right);
    30. countNotNull++;
    31. } else {
    32. deque.offer(new TreeNode(none));
    33. }
    34. }
    35. res.add(list);
    36. }
    37. List> r = new ArrayList<>(res.size());
    38. int size = (int) Math.pow(2, res.size()) - 1;
    39. for (int i = 0; i < res.size(); i++) {
    40. List l = new ArrayList<>(size);
    41. r.add(l);
    42. List list = res.get(i);
    43. int v = (int) Math.pow(2, res.size()-i-1) - 1;
    44. for(int j=0;j
    45. // before
    46. for(int m=0;m
    47. l.add("");
    48. }
    49. if(list.get(j) != none) {
    50. l.add(String.valueOf(list.get(j)));
    51. } else {
    52. l.add("");
    53. }
    54. // after
    55. for(int m=0;m
    56. l.add("");
    57. }
    58. if(j != list.size()-1) {
    59. l.add("");
    60. }
    61. }
    62. }
    63. return r;
    64. }
    65. public static void main(String[] args) {
    66. Solution1 solution = new Solution1();
    67. TreeNode root = new TreeNode(1);
    68. root.left = new TreeNode(2);
    69. root.right = new TreeNode(3);
    70. root.left.right = new TreeNode(4);
    71. System.out.println(solution.printTree(root));
    72. }
    73. }

    总结

    这道题就是二叉树的层序遍历+完全二叉树的特点的题目,感觉更像一个数学题目,先找到规律,然后用代码完成数据展示。欢迎有更高效、更简洁的思路回复。

  • 相关阅读:
    带你深入了解什么是 Java 线程池技术
    JAVA 开发pc端桌面软件 基于idea+javafx+maven+springboot
    VUE启动报错:Error: The project seems to require pnpm but it‘s not installed
    R语言ggplot2可视化:gganimate包基于transition_time函数创建动态散点图动画(gif)
    汽车信息安全--如何理解TrustZone(1)
    Unity3D将比较简单的字典结构封装为json
    Mybatis 实现简单增删改查
    运算方法和运算器
    加解密随笔
    【python】爬取杭州市二手房销售数据做数据分析【附源码】
  • 原文地址:https://blog.csdn.net/weiliuhong1/article/details/126474744