树简介
树跟数组、链表、堆栈一样,是一种数据结构。它由有限个节点,组成具有层次关系的集合
- 节点的度:一个节点含有的子节点个数称为该节点的度;
- 树的度:一棵树中,最大节点的度称为树的度;
- 父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
- 叶子节点:节点的度为0(也就是没有子节点的节点);
- 深度:对于任意节点n,n的深度为从根到n的唯一路径长,根节点的深度为0;
- 高度:对于任意节点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0
特点
- 每个节点要么没有子节点要么只有有限个子节点;
- 有一个特殊的节点,它没有父节点,称为根节点;
- 每一个非根节点有且只有一个父节点;
- 树里面没有环路
树的表示方式
父节点表示法
1 | private Node<T>[] nodes; |
这种方式可以快速的找到父节点,但是想要找某个节点的所有子节点需要遍历整个树才可以
孩子链表表示法
每个非叶子节点通过一个链表来记录它所有的子节点
1 | private Node<T>[] nodes; |
这种方式可以快速找到它的所有子节点,但是找到某个节点的父节点需要遍历整个节点数组
分类
按照有序性,可以分为有序树和无序树:
- 无序树:树中任意节点的子节点之间没有顺序关系
- 有序树:树中任意节点的子节点之间有顺序关系
按照节点包含子树个数,可以分为B树和二叉树。