java整体打印二叉树

举报
兔老大 发表于 2021/04/21 23:02:10 2021/04/21
【摘要】 一个调的很好的打印二叉树的代码。 用空格和^v来表示节点之间的关系。 效果是这样: Binary Tree:                                     &nbsp...

一个调的很好的打印二叉树的代码。

用空格和^v来表示节点之间的关系。

效果是这样:

Binary Tree:
                                         v7v       
                        v6v       
                                         ^5^       
       H4H       
                                         v3v       
                        ^2^       
                                         ^1^  

 

对于每个节点,先打印右子树,然后打印本身,然后打印左子树。

 


  
  1. public class fan {
  2. public static class Node {
  3. public int value;
  4. Node left;
  5. Node right;
  6. public Node(int data) {
  7. this.value = data;
  8. }
  9. }
  10. public static void printTree(Node head) {
  11. System.out.println("Binary Tree:");
  12. printInOrder(head, 0, "H", 17);
  13. System.out.println();
  14. }
  15. public static void printInOrder(Node head, int height, String to, int len) {
  16. if (head == null) {
  17. return;
  18. }
  19. printInOrder(head.right, height + 1, "v", len);
  20. String val = to + head.value + to;
  21. int lenM = val.length();
  22. int lenL = (len - lenM) / 2;
  23. int lenR = len - lenM - lenL;
  24. val = getSpace(lenL) + val + getSpace(lenR);
  25. System.out.println(getSpace(height * len) + val);
  26. printInOrder(head.left, height + 1, "^", len);
  27. }
  28. public static String getSpace(int num) {
  29. String space = " ";
  30. StringBuffer buf = new StringBuffer("");
  31. for (int i = 0; i < num; i++) {
  32. buf.append(space);
  33. }
  34. return buf.toString();
  35. }
  36. public static void main(String[] args) {
  37. Node head = new Node(4);
  38. head.left = new Node(2);
  39. head.right = new Node(6);
  40. head.left.left = new Node(1);
  41. head.left.right = new Node(3);
  42. head.right.left = new Node(5);
  43. head.right.right = new Node(7);
  44. printTree(head);
  45. }
  46. }

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/83105504

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。