二叉树特点
1.对于每个节点最大孩子树数量不超过2
2.对任意节点有且仅有一个父节点
3.整棵树只有一个根
完全二叉树
只有最底层和次底层有叶子节点,且最底层叶子节点在最左边
满二叉树
除最后一层外,非叶子节点每个节点都有两个子节点;
总节点数为2k-1(k为层数);每层节点数为2k-1;
搜索二叉树
左小右大(左孩子树比根小,右孩子树比根大)
平衡二叉树
任意一个节点的左右子树高度差不大于1
平衡二叉树的缺点:有序数组的插入调整次数多,耗内存,损伤CPU,对计算机性能有影响
平衡二叉树的平衡旋转示例图:
红黑树
1.心(根)是黑的
2.j节点要么红要么黑 (节点只有这两种颜色)
3.两颗红心不能在一起 (不能有两个连续红色节点)
4.所有路径经过黑色节点数目一致
5.近似平衡的二叉树 (实现继续保持红黑树的操作相对简单)
哈夫曼树
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。对任意给定文本,哈夫曼树和哈夫曼编码是不唯一的,但带权路径长度的总和是一定的。
定长编码:使用一定长度的符号编码
哈夫曼编码优点:减少空间使用,避免二义性
二叉树的遍历
遍历一定要不重不漏
深度遍历:一条路走到黑,不撞南墙不回头
包括: 前序遍历(根左右) 中序遍历(左 根 右) 后序遍历(左 右 根)
广度遍历 :远交近攻 层次遍历(从上至下,从左至右)
时间复杂度:O(n)
空间复杂度:O(n)
代码实现参考地址:
递归方法:https://blog.csdn.net/flystar27/article/details/119789125?spm=1001.2014.3001.5501
迭代方法:https://blog.csdn.net/flystar27/article/details/119789565?spm=1001.2014.3001.5501