java语言实现二叉树
java语言实现二叉树
一、概念
对于大量的输入数据,链表的线性访问时间太慢,不宜使用。树这种结构极大的缩短了数据的访问时间。什么是树呢?它是怎么做到提高访问效率的呢?树可以用几种方式定义,定义树的一种自然方式是递归方式,一棵树是一些节点的集合,这些集合可以是空集;若不是空集,则树由根(root)节点以及n(n>=0)个子(child)节点组成,这些子节点每一个都有来自根节点的一条有向边(edge)所连接。
如上图,这是一棵树。【A】为根节点,【B】、【C】、【D】、【E】、【F】、【G】为【A】的子(child)节点,另外每个节点下面都可能有任意多个child,也有可能没有child,对于没有child的节点,我们称为叶(leaf)节点。从根节点到任意节点经过的边(edge)数称为该节点的深度。上图中【E】的深度是1,【P】的深度是3。一棵树的深度等于该树最深叶节点的深度。
二、应用
树的应用有很多,流行的用法之一是目录结构,如图是UNIX文件系统中一个典型的目录。
这个目录的根是/usr(* 号表示此为目录),/usr下面有三个子目录:mark、alex、bill,alex目录下面有一个junk的文件。上图的所有文件都可以通过根节点递归遍历得到,如下伪代码
private void listAll(int depth){
printName(depth); // 打印出该深度下的节点名称
if(isDirectory()){
// 如果该节点是文件夹,则继续遍历该文件夹下文件
for(File c:thisDiretory){
listAll(depth+1);
}
}
private void listAll(){
listAll(0);
}
通过这种listAll的递归,就可以打印出根节点下的所有节点。
三、二叉树
二叉树是一种特殊的树,其每个节点下最多有两个子节点。如下图显示的是普通树和二叉树
上图普通树的节点【6】下面有三个子节点,所以它并不属于二叉树。
二叉树有许多