package com.mjy.printer;

/**

             ┌──800
         ┌──760
         │   └──600
     ┌──540
     │   └──476
     │       └──445
 ┌──410
 │   └──394
381
 │     ┌──190
 │     │   └──146
 │  ┌──40
 │  │  └──35
 └──12
    └──9
 
 * @author MJ Lee
 *
 */
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();
	}
	
	/**
	 * 生成node节点的字符串
	 * @param nodePrefix node那一行的前缀字符串
	 * @param leftPrefix node整棵左子树的前缀字符串
	 * @param rightPrefix node整棵右子树的前缀字符串
	 * @return
	 */
	private String printString(
			Object node, 
			String nodePrefix,
			String leftPrefix, 
			String rightPrefix) {
		Object left = tree.left(node);
		Object right = tree.right(node);
		String string = tree.string(node).toString();
		
		int length = string.length();
		if (length % 2 == 0) {
			length--;
		}
		length >>= 1;
		
		String nodeString = "";
		if (right != null) {
			rightPrefix += Strings.blank(length);
			nodeString += printString(right, 
					rightPrefix + rightAppend, 
					rightPrefix + lineAppend, 
					rightPrefix + blankAppend);
		}
		nodeString += nodePrefix + string + "\n";
		if (left != null) {
			leftPrefix += Strings.blank(length);
			nodeString += printString(left, 
					leftPrefix + leftAppend, 
					leftPrefix + blankAppend, 
					leftPrefix + lineAppend);
		}
		return nodeString;
	}
}
最近下载更多
Cathcode  LV1 2022年5月2日
wang512237140  LV20 2021年12月16日
matintalorr  LV10 2021年8月31日
xkfkb2341  LV1 2020年11月28日
xwq1234567  LV1 2020年10月27日
Cc1996  LV1 2020年10月26日
huangwu1026  LV1 2020年7月29日
2650343087  LV6 2020年5月26日
唐力刚  LV1 2020年5月13日
kyq123  LV1 2020年4月10日
最近浏览更多
wuziayng1232  LV10 2023年6月1日
我爱你野狼123 2023年3月22日
暂无贡献等级
666ing  LV2 2023年2月26日
heqian  LV16 2023年1月10日
微信网友_6248713511227392  LV11 2022年12月5日
vitos5n  LV9 2022年9月6日
crosa_Don  LV18 2022年7月6日
wang512237140  LV20 2021年12月16日
Luo qian98vu  LV1 2021年11月10日
tangjj7260  LV18 2021年10月25日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友