一、树的概念
1、树的概念:树,作为非线性数据结构的典型例子,不再是一对一,而是一对多的关系。示例图如下
- 根节点(root) :最顶部节点,唯一的
- 父节点和子节点:parent,child是相对的
- 子节点:每个子节点只有一个父节点
- 叶子节点:没有子节点的节点称为叶子节点(leaf)
2、树的相关术语:示意图如下
- 节点的度:该节点的子节点个数,8的度为2
- 树的度:这棵树内子节点最多的节点的度,上图树的度为2
- 树的高度:高度自底向上增加
- 树的深度:深度自顶向下增加
- 节点的层次:根节点为第一层,自顶向下增加,6的层次为3
3、树的表示方法
- 父节点表示法:使用角标表示父节点的索引
public class TreeNode {
private Object mData; //存储的数据
private int mParent; //父节点的下标
public TreeNode(Object data,int parent){
mData=data;
mParent=parent;
}
....
public static void main(String[] args){
TreeNode[] arrayTree = new TreeNode[10];
}
}
- 链表表示节点: 使用引用,而不是索引表示父节点和子节点
public class LinkedTreeNode {
private Object mData; //存储的数据
private LinkedTreeNode mParent; //父亲节点的下标
private List<LinkedTreeNode> mChildNodeList; //孩子节点的引用
public LinkedTreeNode(Object data, LinkedTreeNode parent) {
mData = data;
mParent = parent;
}
...
public static void main(String[] args){
LinkedList<LinkedTreeNode> linkedTree = new LinkedList<>();
}
}
二、二叉树(Binary Tree)
1、二叉树的定义:树的每个节点最多只能有两个子节点