设计一个打印整棵树的打印函数

简介: 设计一个打印整棵树的打印函数

通过本题可以更好的理解二叉树的递归以及二叉树的设计及实现

package com.harrison.class07;
public class Code06_PrintBinaryTree {
  public static class Node {
    public int value;
    public Node left;
    public Node right;
    public Node(int data) {
      this.value = data;
    }
  }
  public static void printTree(Node head) {
    System.out.println("Binary Tree:");
    printInOrder(head, 0, "H", 17);
    System.out.println();
  }
  public static void printInOrder(Node head, int height, String to, int len) {
    if (head == null) {
      return;
    }
    printInOrder(head.right, height + 1, "v", len);
    String val = to + head.value + to;
    int lenM = val.length();
    int lenR = (len - lenM) / 2;
    int lenL = len - lenM - lenR;
    val = getSpace(lenL) + val + getSpace(lenR);
    System.out.println(getSpace((height * len)) + val);
    printInOrder(head.left, height + 1, "^", len);
  }
  public static String getSpace(int num) {
    String space = " ";
    StringBuffer bf = new StringBuffer();
    for (int i = 0; i < num; i++) {
      bf.append(space);
    }
    return bf.toString();
  }
  public static void main(String[] args) {
    Node head = new Node(1);
    head.left = new Node(-222222222);
    head.right = new Node(3);
    head.left.left = new Node(Integer.MIN_VALUE);
    head.right.left = new Node(55555555);
    head.right.right = new Node(66);
    head.left.left.right = new Node(777);
    printTree(head);
    head = new Node(1);
    head.left = new Node(2);
    head.right = new Node(3);
    head.left.left = new Node(4);
    head.right.left = new Node(5);
    head.right.right = new Node(6);
    head.left.left.right = new Node(7);
    printTree(head);
    head = new Node(1);
    head.left = new Node(1);
    head.right = new Node(1);
    head.left.left = new Node(1);
    head.right.left = new Node(1);
    head.right.right = new Node(1);
    head.left.left.right = new Node(1);
    printTree(head);
  }
}

效果截图:image.png

相关文章
|
DataWorks 数据管理 大数据
DataWorks操作报错合集之如何解决表字段类型从string改为datetime报错
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
机器学习/深度学习 人工智能 自然语言处理
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
1244 0
Self-Attention 和 Multi-Head Attention 的区别——附最通俗理解!!
|
存储 数据挖掘 数据处理
【破晓数据湖新时代!】巴别时代揭秘:Apache Paimon 打造 Streaming Lakehouse 的神奇之旅!
【8月更文挑战第9天】随着数据湖技术的发展,企业积极探索优化数据处理的新途径。Apache Paimon 作为一款高性能数据湖框架,支持流式与批处理,适用于实时数据分析。本文分享巴别时代使用 Paimon 构建 Streaming Lakehouse 的实践经验。Paimon 统一了数据存储与查询方式,对构建实时数据管道极具价值。
746 3
|
监控 数据可视化 Linux
使用Portainer图形化工具轻松管理远程Docker环境并实现远程访问
使用Portainer图形化工具轻松管理远程Docker环境并实现远程访问
|
vr&ar
VGen为数字媒体带来惊喜
【1月更文挑战第7天】VGen为数字媒体带来惊喜
330 1
VGen为数字媒体带来惊喜
|
Java Unix API
Kotlin:正则Regex原来这么方便
Regex相对于Java的Api来说,使用起来更加的简单,如果大家在非正则的功能使用时,比如寻找,替换,是否包含等等,完全可以使用字符串自带的功能即可,如果说要实现一些较为复杂的,比如邮箱的验证,手机号的验证等等,那么Regex绝对是你的首选。
468 0
Kotlin:正则Regex原来这么方便
|
NoSQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之大表同步如何优化
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
JSON 测试技术 API
Postman Newman 实现 API 自动化测试的快速指南
Newman 是一款专为 Postman 打造的命令行工具,旨在通过自动运行 Postman 集合和环境,实现 API 测试的自动化。它使得开发者无需打开 Postman 图形界面,即可直接在命令行中执行测试用例。
|
机器学习/深度学习 消息中间件 数据可视化
OpenCV入门(C++/Python)- 使用OpenCV调整尺寸大小(三)
OpenCV入门(C++/Python)- 使用OpenCV调整尺寸大小(三)
806 1