分类
类型
-
满二叉树
- 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。
- 如果一个二叉树的层数为K,且结点总数是(2^k) -1
- 肯定是完全二叉树
-
完全二叉树
- 叶子节点紧凑靠左
- 除了叶子节点外,满足满二叉树特性
- 可以使用数组表示
-
平衡二叉树
最大最小深度差不超过1
结构
- 二分搜索树
- 优先队列
- 堆(完全二叉树)
- 线段树
- AVL(平衡二叉树)
- 红黑树(黑平衡)
遍历
树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。
设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD (称为后根次序遍历)。
先序遍历
private void preOrder(Node node) {
if (null == node) {
return;
}
System.out.println(node.e);
preOrder(node.left);
preOrder(node.right);
}
中序遍历
如果是二分搜索树,此时的结果是有顺序的。
private void midOrder(Node node) {
if (null == node) {
return;
}
midOrder(node.left);
System.out.println(node.e);
midOrder(node.right);
}
后序遍历
private void postOrder(Node node) {
if (null == node) {
return;
}
postOrder(node.left);
postOrder(node.right);
System.out.println(node.e);
}