Java的二叉树排序以及遍历文件展示文本格式的文件树
作者:sunxing007 时间:2021-08-04 07:13:43
Java二叉树排序算法
排序二叉树的描述也是一个递归的描述, 所以排序二叉树的构造自然也用递归的:
排序二叉树的3个特征:
1:当前node的所有左孩子的值都小于当前node的值;
2:当前node的所有右孩子的值都大于当前node的值;
3:孩子节点也满足以上两点
package test.sort;
public class BinaryNode {
private int value;//current value
private BinaryNode lChild;//left child
private BinaryNode rChild;//right child
public BinaryNode(int value, BinaryNode l, BinaryNode r){
this.value = value;
this.lChild = l;
this.rChild = r;
}
public BinaryNode getLChild() {
return lChild;
}
public void setLChild(BinaryNode child) {
lChild = child;
}
public BinaryNode getRChild() {
return rChild;
}
public void setRChild(BinaryNode child) {
rChild = child;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
//iterate all node.
public static void iterate(BinaryNode root){
if(root.lChild!=null){
iterate(root.getLChild());
}
System.out.print(root.getValue() + " ");
if(root.rChild!=null){
iterate(root.getRChild());
}
}
/**
* add child to the current node to construct a tree.
* Time: O( nlog(n) )
* **/
public void addChild(int n){
if(n<value){
if(lChild!=null){
lChild.addChild(n);
}
else{
lChild = new BinaryNode(n, null, null);
}
}
else{
if(rChild!=null){
rChild.addChild(n);
}
else{
rChild = new BinaryNode(n, null, null);
}
}
}
//test case.
public static void main(String[] args){
System.out.println();
int[] arr = new int[]{23,54,1,65,9,3,100};
BinaryNode root = new BinaryNode(arr[0], null, null);
for(int i=1; i<arr.length; i++){
root.addChild(arr[i]);
}
BinaryNode.iterate(root);
}
}
Java遍历文件展示文本格式的文件树
用java写一个代码变历文件树,打印出结构,类似在cmd输入命令tree的结果。
本来觉得很简单,做的时候才知道有点难。要是感兴趣, 你也可以试试。
package test.io;
//在网上找的,听说还是老字竹原创。代码简洁,但是我费了好大的功副消化
import java.util.ArrayList;
import java.util.List;
public class Folder {
public Folder(String title) {
this.title = title;
}
private String title;
private List<Folder> children = new ArrayList<Folder>();
public void addChild(Folder f) {
children.add(f);
}
public List<Folder> getChildren() {
return children;
}
public void setChildren(List<Folder> children) {
this.children = children;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String toString(String lftStr, String append) {
StringBuilder b = new StringBuilder();
b.append(append + title);
b.append("/n");
if (children.size() > 0) {
for (int i = 0; i < children.size() - 1; i++) {
b.append(lftStr+ children.get(i).toString(lftStr + "│ ",
"├-"));
}
b.append(lftStr+ children.get(children.size() - 1).toString(lftStr +
" ","└-"));
}
return b.toString();
}
public static void main(String[] args) {
Folder root = new Folder("菜单列表");
Folder f1 = new Folder("开始菜单");
root.addChild(f1);
Folder f1_1 = new Folder("程序");
f1.addChild(f1_1);
Folder f1_1_1 = new Folder("附件");
f1_1.addChild(f1_1_1);
Folder f1_1_1_1 = new Folder("娱乐");
f1_1_1.addChild(f1_1_1_1);
Folder f1_1_1_2 = new Folder("娱乐2");
f1_1_1.addChild(f1_1_1_2);
Folder f1_2 = new Folder("辅助工具");
f1.addChild(f1_2);
System.out.println(root.toString(" ", "$"));
}
}
//**************************************
//经过消化之后我修改的。可打印文件结构
import java.io.*;
public class DocTree {
File root = null;
public DocTree(File f){
this.root = f;
}
public static void main(String[] args){
File root = new File("c://test");
DocTree tree = new DocTree(root);
System.out.println(tree.toString(" ", ""));
}
public String toString(String leftStr, String append){
StringBuilder b = new StringBuilder();
b.append(append + root.getName());
b.append("/n");
if(!root.isFile()&&root.listFiles().length!=0){
File[] files = root.listFiles();
DocTree[] docTrees = new DocTree[files.length];
for(int i=0; i<docTrees.length; i++){
docTrees[i] = new DocTree(files[i]);
}
for (int i=0; i<files.length-1; i++){
b.append(leftStr + docTrees[i].toString(leftStr+"│", "├"));
}
b.append(leftStr + docTrees[docTrees.length-1].toString(leftStr + " ", "└"));
}
return b.toString();
}
}
//*****************************************
//然后我还是觉得理解起来不方便, 过几天说不定就忘记了,
//还是自己写一个, 虽然思想照抄, 但我觉得自己的理解起来很方便。
//带注释,
import java.io.*;
public class Tree {
File root = null;
public Tree(File f){
this.root = f;
}
/**
test
├1
│├目录1.txt
│├目录11
││├111.txt
││└112.txt
│└12
└test.pdf
*/
/**
* @param root 当前正在被扫描的根文件
* @param childLeftStr 如果该文件有孩子,childLeftStr
* 表示孩子节点的左面应该打印出来的结构性信息
* 拿上面的例子来说,根结点test的孩子的左面的
* 结构信息为"" 空,结点"目录11"的孩子的结构信息为"││",
* @param junction 结点图标,如果是该结点是它父亲的最后一个结点,
* 则为"└",否则为"├".
*/
public void showTree(File root, String childLeftStr, String junction){
//打印结点的信息
System.out.println(junction + root.getName());
//如果有孩子, 而且孩子的数目不为0
if(!root.isFile()&&root.listFiles().length!=0){
File[] files = root.listFiles();
//构造孩子结点
Tree[] children = new Tree[files.length];
for(int i=0; i<files.length; i++){
children[i] = new Tree(files[i]);
}
//打印孩子结点
for(int i=0; i<children.length-1; i++){
//对所有的孩子结点,先打印出左边的结构信息,
System.out.print(childLeftStr);
//递归调用showTree, 注意参数有所变化,文件加的深度增加的时候
,它的孩子的结构信息也会
//增加,如果不是最后一个孩子,则结构信息需加上"│"。
showTree(children[i].root,childLeftStr+"│", "├");
}
//最后一个孩子需要特殊处理
//打印结构信息
System.out.print(childLeftStr);
//如果是最后一个孩子,则结构信息需加上" "。
//结点形状也调整为"└"
showTree(children[files.length-1].root, childLeftStr+" ","└");
}
}
public static void main(String[] args) {
File f = new File("C://test");
Tree t = new Tree(f);
t.showTree(f,"", "");
}
}
标签:Java,二叉树
0
投稿
猜你喜欢
解决idea web 配置相对路径问题
2022-01-12 06:48:40
C# 键盘Enter键取代Tab键实现代码
2022-11-21 08:53:14
c# SendMail发送邮件实例代码
2023-03-13 11:17:21
Java中static变量作用和用法详解
2021-11-09 12:01:04
解决使用mybatis-plus时,生成的SQL大写变小写加下划线问题
2022-10-20 09:24:47
JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果
2023-11-28 19:46:08
一文快速掌握Spring Cloud Stream
2023-09-01 23:09:38
C++实现LeetCode(9.验证回文数字)
2023-06-21 00:20:38
详解Spring Data Jpa 模糊查询的正确用法
2022-03-28 15:07:50
C语言高效编程的几招小技巧
2023-11-02 14:12:50
java中方法递归的简单示例
2022-11-25 11:45:12
JVM 心得分享(加载 链接 初始化)
2023-09-01 19:17:50
SpringBoot集成Redis的实现示例
2022-10-22 14:50:33
深入学习C#网络编程之HTTP应用编程(下)
2023-03-16 12:06:37
Java线程的start方法回调run方法的操作技巧
2023-11-11 06:02:00
基于C#实现网页爬虫
2021-10-30 08:13:44
Java CAS操作与Unsafe类详解
2023-06-15 10:06:49
SpringBoot中 Jackson 日期的时区和日期格式问题解决
2021-09-06 19:37:50
JSch教程使用sftp协议实现服务器文件载操作
2023-10-29 17:43:33
IDEA中配置文件模板的添加方法
2023-10-28 17:52:31