如何打印一棵树(Java)
1、有一棵多叉树,将它打印出来。
import java.util.LinkedList; /**
* 需求:按层打印一棵树
* 说明:树是保存在一个链表中
* created by wangjunfu on 2017-05-25.
*/
public class TreeNode {
String data;
TreeNode parent;
LinkedList<TreeNode> childlist; TreeNode() {
data = null;
childlist = new LinkedList();
parent = null;
} //递归显示并打印一棵树
private static void displayTree(TreeNode f, int level) { String preStr = ""; // 打印前缀
for (int i = 0; i < level; i++) {
preStr += " ";
} for (int i = 0; i < f.childlist.size(); i++) {
TreeNode t = f.childlist.get(i);
System.out.println(preStr + "-" + t.data); if (!t.childlist.isEmpty()) {
displayTree(t, level + 1);
}
}
}
}
2、按层打印一棵树
下面抛个砖,一棵树,如何按层去打印呢?
我使用了一个最笨的办法,就是先存在一个list里,然后再排序打印,我知道这不是我想要的结果,但我确实想不出其它方法了,希望看到的大神抽空回个帖子,万分感谢!
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList; /**
* 需求:按层打印一棵树
* 说明:树是保存在一个链表中
* created by wangjunfu on 2017-05-25.
*/
public class TreeNode_Level {
Integer level;
String data;
TreeNode_Level parent;
LinkedList<TreeNode_Level> childlist; public Integer getLevel() {
return level;
} public void setLevel(Integer level) {
this.level = level;
} TreeNode_Level() {
data = null;
childlist = new LinkedList();
parent = null;
} // 递归读取一棵树
private ArrayList<TreeNode_Level> displayTree(TreeNode_Level f, int level) { ArrayList<TreeNode_Level> result = new ArrayList<>();
if (f == null) {
return result;
} for (int i = 0; i < f.childlist.size(); i++) {
TreeNode_Level obj = f.childlist.get(i);
obj.level = level;
result.add(obj); if (!obj.childlist.isEmpty()) {
displayTree(obj, level + 1);
}
} return result;
} // 排序、按层打印结果
private void print() {
TreeNode_Level f = null; // 到库里取数据 ArrayList<TreeNode_Level> list = displayTree(f, level = 1); Collections.sort(list, new Comparator<TreeNode_Level>() {
@Override
public int compare(TreeNode_Level o1, TreeNode_Level o2) {
// 正序排序
return o1.getLevel().compareTo(o2.getLevel());
}
}); list.forEach(item -> System.out.println(item.data));
}
}
如何打印一棵树(Java)的更多相关文章
- 小希的迷宫(MST单棵树判断法则)
小希的迷宫 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- A Simple Problem with Integers(100棵树状数组)
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
- AVL树----java
AVL树----java AVL ...
- 2017年陕西省网络空间安全技术大赛——种棵树吧——Writeup
2017年陕西省网络空间安全技术大赛——种棵树吧——Writeup 下载下来的zip解压得到两个jpg图片,在Kali中使用binwalk查看文件类型如下图: 有两个发现: 1111.jpg 隐藏了一 ...
- SDUT 2129 树结构练习——判断给定森林中有多少棵树
树结构练习——判断给定森林中有多少棵树 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 众 ...
- B树Java代码实现以及测试
B树定义 B 树又叫平衡多路查找树.一棵m阶的B 树 (m叉树)的特性如下: 根节点至少有两个孩子 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子. 每个非根节点至少有M/2-1(上取整)个 ...
- P1047_校门外的树(JAVA语言)
题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米. 我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置: 数轴上的每个整数点,即0,1,2,-,L都种 ...
- LeetCode——Same Tree(判断两棵树是否相同)
问题: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...
- ✡ leetcode 156. Binary Tree Upside Down 旋转树 --------- java
156. Binary Tree Upside Down Add to List QuestionEditorial Solution My Submissions Total Accepted: ...
随机推荐
- Django----ModelFrom
ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信 ...
- 网易云信&七鱼市场总监姜菡钰:实战解读增长黑客在B端业务的运用
近些年 ,随着互联网的迅速崛起,“增长黑客”一词逐渐映入大众的眼帘,并成为了最热门的话题之一.从2018年开始,线上流量触达天花板,引流之争的激烈程度空前高涨,企业为了获得更多的关注,产品的比拼.流量 ...
- dma传输数据长度,在启动前必须确保是一个大于0的数字
否则将导致不能接受数据
- Luogu 1603 - 斯诺登的密码 - [简单字符串操作]
题目链接:https://www.luogu.org/problemnew/show/P1603 题目背景 根据斯诺登事件出的一道水题 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混 ...
- azkaban---visualize crontab--frontail
azkaban---visualize crontab azkaban--docker-----http://www.jkeabc.com/254015.html azkaban--tips ht ...
- elasticsearch in docker/ and aggregation,,performance tune ;throughout
Docker环境中Elasticsearch的安装 ]https://wenchao.ren/archives/category/elasticsearch/page/2 [ElasticSearch ...
- Instruments之Leaks学习
前言: 本篇文章,在于学习,我把别人的一些感觉好的文章汇总成了一篇,亲自实现了一下,留用于今后学习资料. 文章脉络:文章脉络: 一.内存优化 简介:Objective_C 有3种内存管理方法, 它们分 ...
- [development][libconfig] 配置文件库
以前,一直用ini的配置文件. 简单清晰但是不灵活. 换一个: 试试libconfig 主页: http://www.hyperrealm.com/oss_libconfig.shtml githu ...
- python找出数组中第二大的数
#!usr/bin/env python #encoding:utf-8 ''''' __Author__:沂水寒城 功能:找出数组中第2大的数字 ''' def find_Second_large_ ...
- 用promise和async/await分别实现红绿灯
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...