具体代码请看:NDKPractice项目的datastructure35binarytree
1. 二叉树分类
普通二叉树
完全二叉树
满二叉树
完全二叉树
:
概念:叶结点只能出现在最底层的两层,且最底层叶结点均处于次底层叶结点的左侧。
满二叉树
:
概念:所有叶结点同处于最底层(非底层结点均是内部结点),一个深度为k(>=-1)且有2^(k+1) - 1个结点
1.1 常用的操作树:
- 二叉搜索树(Binary Search Tree)又称 B 树 (SQL)
- 哈夫曼树
- 平衡二叉树(AVL树):`可以是一棵空树,左右子树的高度差不会超过 1 ,并且左右两棵子树都是一棵平衡二叉树`
- 红黑树
2. 二叉树的遍历
1 | void visit(char data){ |
2.1 前序遍历
1 | template <class T> |
2.2 中序遍历
1 | template <class T> |
2.3 后序遍历
1 | template <class T> |
2.4 层序遍历
1 | template <class T> |
3. 根据前序和中序遍历
或 后序和中序遍历
还原二叉树
中序遍历 和 前序或后序任一种都可还原二叉树
前序:ABCDEFGH
中序:BDCEAFHG
4. 二叉树的深度:
1 | /** |
5. 判断是否是平衡二叉树
可以是一棵空树,左右子树的高度差不会超过 1 ,并且左右两棵子树都是一棵平衡二叉树
1 | /** |