1. 二分搜索树
2. 平衡二叉树(最大深度和最小深度差为1):AVL树,红黑树
3. 完全二叉树(二叉堆):除了最高层以外,其余层节点个数都达到最大值,并且最高层节点都优先集中在最左边。
4. 满二叉树: 除了最高层有叶子节点,其余层无叶子,并且非叶子节点都有2个子节点。
5. 堆,并查集:对数据进行特殊的操作产生高效的结果
6. 线段树,Trie(字典树,前缀树)
。
二分搜索树
二分搜索树是一种二叉树。每个结点的值大于其左子树所有结点的值,小于其右子树所有结点的值。每一棵子树也是一个二叉搜索树。
性质:
- 任意结点,左子树的值小于当前结点的值,右子树的值大于当前结点的值。
- 没有父节点的称为根结点。
- 每一个非根节点都有一个父节点。
- 第i层上最多有2^(n-1)个结点。
- 包含n个结点的二叉树高度至少为long2(n+1)
- 存储的元素必须有可比性。
二叉树的创建:
public class BST<E extends Comparable<E>> {
private class Node{
private E e;
private Node left;
private Node right;
public Node(E e) {
this.e = e;
left = null;
right = null;
}
}
private Node root;
private int size;
public BST() {
root = null;
size = 0;
}
}
二叉树的遍历
前序遍历:
由于递归算法比较简单,主要描述下非递归算法。
第一种:利用栈的原理,打印当前栈中弹出的元素,将弹出元素的右结点先压入栈中,再将左结点压入栈中,遍历到栈空为止<