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

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

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

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

相关文章
|
5月前
|
程序员 编译器 C语言
用printf函数输出数据
用printf函数输出数据
35 2
|
5月前
|
搜索推荐 C语言 C++
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现3
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
5月前
|
存储
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现2
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
5月前
|
C语言
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现1
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
2月前
|
IDE Go 开发工具
spew - 更直观地打印变量
spew - 更直观地打印变量
27 0
|
3月前
|
容器
打印
打印
49 0
|
5月前
|
搜索推荐 算法
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现4
【C指针(五)】6种转移表实现整合longjmp()/setjmp()函数和qsort函数详解分析&&模拟实现
|
5月前
|
C语言
使用printf函数输出数据
在C语言中,printf函数是一个常用的标准库函数,用于在控制台输出格式化的字符串和数据。它允许我们按照指定的格式输出各种类型的数据,包括整数、浮点数、字符和字符串等。
43 0
打印
4.6 打印 4.6.1 分页符的插入及删除 1、插入水平分页符 选定要插入分页符位置的下一行,在“页面布局”选项卡的“页面设置”组单击“分隔符”,在出现的下拉列表中选择”插入分页符”命令 2、插入垂直分页符 选定要插入分页符位置的右侧列,在“页面布局”选项卡的“页面设置”组单击“分隔符”,在出现的下拉列表中选择”插入分页符”命令。 3、同时插入水平、垂直分页符 选定某单元格,在“页面布局”选项卡的“页面设置”组单击“分隔符”,在出现的下拉列表中选择“插入分页符”命令此时会在该单元格左边框和上边框位置同时插入水平、垂直分页符。 4、删除手动分页符 先选择紧邻水平分页符的下面行 (或该行
|
存储 编译器 C语言
重定义/自定义printf到串口输出实现的三种方法(cubeide)
重定义/自定义printf到串口输出实现的三种方法(cubeide)
704 0