|
|
|
@ -561,9 +561,7 @@ public class Stack<E> extends Vector<E> {
|
|
|
|
|
|
|
|
|
|
### 树(Tree)
|
|
|
|
|
|
|
|
|
|
**树(Tree)**是一个分层的数据结构,由节点和连接节点的边组成,是一种特殊的图,它与图最大的区别是没有循环。树的结构十分直观,而树的很多概念定义都有一个相同的特点:递归。
|
|
|
|
|
|
|
|
|
|
各种树解决的问题以及面临的新问题:
|
|
|
|
|
**树(Tree)**是一个分层的数据结构,由节点和连接节点的边组成,是一种特殊的图,它与图最大的区别是没有循环。树的结构十分直观,而树的很多概念定义都有一个相同的特点:递归。各种树解决的问题以及面临的新问题:
|
|
|
|
|
|
|
|
|
|
- **二叉查找树(BST)**:解决了排序的基本问题,但是由于无法保证平衡,可能退化为链表
|
|
|
|
|
- **平衡二叉树(AVL)**:通过旋转解决了平衡的问题,但是旋转操作效率太低
|
|
|
|
@ -739,6 +737,29 @@ public class TreeNode {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### 斜树
|
|
|
|
|
|
|
|
|
|
- **左斜树**:所有结点都只有左子树
|
|
|
|
|
- **右斜树**:所有结点都只有右子树
|
|
|
|
|
|
|
|
|
|
![斜树](images/Algorithm/斜树.png)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### 满二叉树
|
|
|
|
|
|
|
|
|
|
一颗二叉树的所有分支结点都存在左子树和右子树,且所有叶子节点都只存在在最下面一层。
|
|
|
|
|
![满二叉树](images/Algorithm/满二叉树.png)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### 完全二叉树
|
|
|
|
|
|
|
|
|
|
若二叉树的深度为k,二叉树的层数从1到k-1层的结点都达到了最大个数,在第k层的所有结点都集中在最左边,这就是完全二叉树。完全二叉树由满二叉树引出,满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。
|
|
|
|
|
![完全二叉树](images/Algorithm/完全二叉树.png)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#### 二叉搜索树(Binary Search Tree)
|
|
|
|
|
|
|
|
|
|
二叉搜索树, 又叫**二叉查找树**,它是一棵空树或是具有下列性质的二叉树:
|
|
|
|
|