回顾
在线性表结构中,数组支持随机访问,但是插入删除速度慢,所以有了链表,而链表插入、删除速度快,但是不支持随机访问,所以又有了哈希表,而哈希表随机访问、插入、删除速度快,但是不支持排序,所以有了树(二叉搜索树),树不仅可以解决链表的查询速度慢的问题,而且可以支持排序(二叉搜索树的中序遍历),下面小白新认识下树;
一般树概念
- 树:由一些节点组成,包括:一个树根、若干树叶;
- 根节点(树根) :没有父亲的节点;
- 叶子节点(树叶) :没有儿子的节点;
- 节点高度:对任意节点X,叶子节点到X节点 的最大路径长度;
- 节点深度:对任意节点X,根节点到X节点的 的最大路径长度;
- 树的深度:一棵树中节点的最大深度就是树的 高度,也称为高度;
- 森林:由互不相交树构成的集合
一般树的遍历
- 前(先)序遍历:先访问头节点,再访问子节点;
- 后序遍历:先访问子节点,再访问头节点;
- 层序遍历:从上到下,从左到右访问;需要结合队列实现;
Java遍历实例
分别采用三种不同的遍历方法输出文件夹的名称;
package cn.hlmc.mfg.structure;
import java.io.File;
import java.util.Iterator;
public class TreeIterator {
/**
* 前序遍历
* @param file
*/
public static void preIterator(File file) {
System.out.println(file.getName());
for (File f:file.listFiles()) {
preIterator(f);
}
}
/**
* 后序遍历
* @param file
*/
public static void postIterator(File file) {
for (File f:file.listFiles()) {
postIterator(f);
}
System.out.println(file.getName());
}
/**
* 层序遍历
* @param file
*/
public static void sequenceIterator(File file) {
//队列
MyQueue<File> queue=new MyQueue<File>();
queue.push(file);
while(!queue.isEmpty()) {
File f=queue.pop();
System.out.println(f.getName());
for (File ele:f.listFiles()) {
queue.push(ele);
}
}
}
}