打印二叉树

打印二叉树代码

1 BinarTreeInfo

package com.xk.algorithm.tree.binary.printer;

public interface BinaryTreeInfo {
   /**
    * who is the root node
    */
   Object root();
   /**
    * how to get the left child of the node
    */
   Object left(Object node);
   /**
    * how to get the right child of the node
    */
   Object right(Object node);
   /**
    * how to print the node
    */
   Object string(Object node);
}

2 BinaryTrees

package com.xk.algorithm.tree.binary.printer;

/**
 * 
 * @author MJ Lee
 *
 */
public final class BinaryTrees {

   private BinaryTrees() {
   }

   public static void print(BinaryTreeInfo tree) {
      print(tree, null);
   }

   public static void println(BinaryTreeInfo tree) {
      println(tree, null);
   }

   public static void print(BinaryTreeInfo tree, PrintStyle style) {
      if (tree == null || tree.root() == null) return;
      printer(tree, style).print();
   }

   public static void println(BinaryTreeInfo tree, PrintStyle style) {
      if (tree == null || tree.root() == null) return;
      printer(tree, style).println();
   }

   public static String printString(BinaryTreeInfo tree) {
      return printString(tree, null);
   }

   public static String printString(BinaryTreeInfo tree, PrintStyle style) {
      if (tree == null || tree.root() == null) return null;
      return printer(tree, style).printString();
   }

   private static Printer printer(BinaryTreeInfo tree, PrintStyle style) {
      if (style == PrintStyle.INORDER) return new InorderPrinter(tree);
      return new LevelOrderPrinter(tree);
   }

   public enum PrintStyle {
      LEVEL_ORDER, INORDER
   }
}

3 Files

package com.xk.algorithm.tree.binary.printer;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

public class Files {
   
   public static void writeToFile(String filePath, Object data) {
      writeToFile(filePath, data, false);
   }
   
   public static void writeToFile(String filePath, Object data, boolean append) {
      if (filePath == null || data == null) return;
      
      try {
         File file = new File(filePath);
         if (!file.exists()) {
            file.getParentFile().mkdirs();
            file.createNewFile();
         }
         
         try (FileWriter writer = new FileWriter(file, append);
               BufferedWriter out = new BufferedWriter(writer) ) {
            out.write(data.toString());
                out.flush();
            }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
   
}

InorderPrinter

public class InorderPrinter extends Printer {
   private static String rightAppend;
   private static String leftAppend;
   private static String blankAppend;
   private static String lineAppend;
   static {
      int length = 2;
      rightAppend = "┌" + Strings.repeat("─", length);
      leftAppend = "└" + Strings.repeat("─", length);
      blankAppend = Strings.blank(length + 1);
      lineAppend = "│" + Strings.blank(length);
   }

   public InorderPrinter(BinaryTreeInfo tree) {
      super(tree);
   }

   @Override
   public String printString() {
      StringBuilder string = new StringBuilder(
            printString(tree.root(), "", "", ""));
      string.deleteCharAt(string.length() - 1);
      return string.toString();
   }
   
   private String printString(
         Object node, 
         String nodePrefix,
         String leftPrefix, 
         String rightPrefix) {
      Object left = tree.left(node);
      Object right = tree.right(node);
      String string &#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值