代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
在控制台上打印二叉树
作者:
ohagi
/ 发布于
2015/8/19
/
462
在学习二叉查找树时,希望把树打印出来使得看的更加直观。在网上没有找到合适的代码,于是花了一点时间自己写了一个。
package tree; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Queue; /* * 二叉查找树 */ public class BinarySortTree { // private int floor; // 节点所在层数,根为第0层,以此类推。。。 // private int position; // 以完全二叉树来计算节点在层中的位置,0,1... private BinarySortTree parent; private BinarySortTree leftChild; private BinarySortTree rightChild; private int value; public BinarySortTree() { super(); } public BinarySortTree(int value) { super(); this.value = value; } /* * 查找某个关键字,存在则返回true */ public boolean find(int target) { if (target == value) { return true; } else if (target < value && leftChild != null) { return leftChild.find(target); } else if (rightChild != null) { return rightChild.find(target); } return false; } /* * 插入一个值 */ public void insert(int target) { if (target <= value) { if (leftChild != null) { leftChild.insert(target); } else { leftChild = new BinarySortTree(target); leftChild.parent = this; } } else { if (rightChild != null) { rightChild.insert(target); } else { rightChild = new BinarySortTree(target); rightChild.parent = this; } } } /* * 将树转换成字符串,用L表示左孩子,R表示右孩子 * * @see java.lang.Object#toString() */ public void print() { List<BinarySortTree> tree = locateNodes(); int size = tree.size(); // int deepth = 0; // 获取树的深度 while ((size >>= 1) > 0) { deepth++; } deepth++; Iterator<BinarySortTree> iterator = tree.iterator(); int maxPosition = 1; for (int floor = 1; floor <= deepth; floor++) { // 层数,从1开始 maxPosition = 1 << (floor - 1); printBlank((1 << (deepth - floor)) - 1); for (int position = 0; position < maxPosition; position++) { if (iterator.hasNext()) { BinarySortTree node = iterator.next(); if (node != null) { System.out.print(node); } else { System.out.print(" "); } printBlank((1 << (deepth - floor + 1)) - 1); } } System.out.println(); } } /* * 将二叉树用空节点补充成完全二叉树,并以水平遍历形式返回 */ private List<BinarySortTree> locateNodes() { Queue<BinarySortTree> queue = new LinkedList<BinarySortTree>(); List<BinarySortTree> tree = new LinkedList<BinarySortTree>(); // 把树补充成完全二叉树,放在这个链表中 queue.add(this); BinarySortTree empty = null; int nodeCount = 1; // 队列中非空节点数 while (queue.size() > 0 && nodeCount > 0) { BinarySortTree node = queue.remove(); if (node != null) { nodeCount--; tree.add(node); BinarySortTree left = node.leftChild; BinarySortTree right = node.rightChild; if (left == null) { queue.add(empty); } else { queue.add(left); if (left != null) { nodeCount++; } } if (right == null) { queue.add(empty); } else { queue.add(right); if (right != null) { nodeCount++; } } } else { tree.add(empty); queue.add(empty); queue.add(empty); } } return tree; } @Override public String toString() { return "" + value; } private void printBlank(int length) { while (length-- > 0) { System.out.print(" "); } } public BinarySortTree getParent() { return parent; } public void setParent(BinarySortTree parent) { this.parent = parent; } public BinarySortTree getLeftChild() { return leftChild; } public void setLeftChild(BinarySortTree leftChild) { this.leftChild = leftChild; } public BinarySortTree getRightChild() { return rightChild; } public void setRightChild(BinarySortTree rightChild) { this.rightChild = rightChild; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } }
试试其它关键字
二叉树
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
ohagi
贡献的其它代码
(
1
)
.
在控制台上打印二叉树
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3