数据结构(java)----树
来源:互联网 发布:数据采集与处理期刊 编辑:程序博客网 时间:2024/06/05 06:33
什么是树
线性结构中,一个节点至多只有一个头节点,至多只有一个尾节点,彼此连接起来是一条完整的线。
比如链表和数组:
而树,非线性结构的典型例子,不再是一对一,而变成了一对多(而图则可以是 多对多),如下图所示:
几个概念:
1)根节点、父亲节点、孩子节点、叶子节点
2)节点的度:
节点拥有的子树的数目称为节点的度。比如上图中的 3 的度是 2,10 的度是 1,13的度为0 。
3)树的度:
树内各结点度的最大值。上图为2.。
4)节点的层次
从根节点开始算起,根节点算第一层,往后底层。比如上图中,3 的层次是 2,4 的层次是 4。
5)叶子节点:
度为0的节点就是叶子。
6)树的深度或者高度:
树中节点的最大层次称为树的深度或高度,上图为4.
树的两种实现
从上述概念可以得知,树是一个递归的概念,从根节点开始,每个节点至多只有一个父节点,有多个子节点,每个子节点又是一棵树,以此递归。
树有两种实现方式:
- 数组
- 链表
数组表示:
我们可以利用每个节点至多只有一个父节点这个特点,使用 父节点表示法 来实现一个节点:
public class TreeNode { private Object mData; //存储的数据 private int mParent; //父亲节点的下标 public TreeNode(Object data, int parent) { mData = data; mParent = parent; } public Object getData() { return mData; } public void setData(Object data) { mData = data; } public int getParent() { return mParent; } public void setParent(int parent) { mParent = parent; }}
上述代码中,使用 角标 来指明父亲节点的位置,使用这个节点组成的数组就可以表示一棵树。
public static void main(String[] args){ TreeNode[] arrayTree = new TreeNode[10];}
用数组实现的树表示下面的树,(其中一种 )结果就是这样的:
数组实现的树节点使用角标表示父亲的索引,下面用链表表示一个节点和一棵树:链表表示的节点:
public class LinkedTreeNode { private Object mData; //存储的数据 private LinkedTreeNode mParent; //父亲节点的下标 private LinkedTreeNode mChild; //孩子节点的引用 public LinkedTreeNode(Object data, LinkedTreeNode parent) { mData = data; mParent = parent; } public Object getData() { return mData; } public void setData(Object data) { mData = data; } public Object getParent() { return mParent; } public void setParent(LinkedTreeNode parent) { mParent = parent; } public LinkedTreeNode getChild() { return mChild; } public void setChild(LinkedTreeNode child) { mChild = child; }}
使用引用,而不是索引表示父亲与孩子节点。
使用一个 List, 元素是 LinkedTreeNode,就可以表示一棵链表树:
public static void main(String[] args){ LinkedList<LinkedTreeNode> linkedTree = new LinkedList<>();}
这样只需知道 根节点就可以遍历整个树。知道某个节点也可以获取它的父亲和孩子。
树的几种常见分类及使用场景
树,为了更好的查找性能而生。
常见的树有以下几种分类:
- 二叉树
- 平衡二叉树
- B 树
- B+ 树
- 哈夫曼树
- 堆
- 红黑树
阅读全文
0 0
- 数据结构(java)----树
- 数据结构(Java)--树和二叉树
- 数据结构--二叉搜索树(java)
- Java与数据结构(五) 二叉树
- 数据结构之--二叉树(Java代码)
- java数据结构:二叉树
- JAVA 数据结构 二叉树
- JAVA数据结构之树
- java数据结构----二叉树
- Java数据结构-------树介绍
- java数据结构 二叉树
- 数据结构Java版-树
- java数据结构------二叉树
- Java数据结构 -> 树
- 数据结构-Java实现-树
- 【Java数据结构】二叉树
- Java数据结构----树
- Java数据结构----树--堆
- 随想
- HTML基础学习七
- Java语法基础练习题
- POJ1505 二分、贪心
- 基于opencv的简单人脸识别(带通信功能)
- 数据结构(java)----树
- FastDFS 文件服务器的搭建
- plsql登录提示ORA-12514:TNS:listener does not……
- c++常见面试题30道
- 海量数据, 为何总是 "海量垃圾" ?!
- VMware vSphere Web Services SDK编程指南(十)- 10 Storage
- 插件大全
- linux下的C++编程错误(一):terminate called after throwing an instance of ‘std::ios_base::failure' wha
- (网易2018校招笔试)[编程题] 魔法币 Magic Coin