二叉树知识框架
二叉树遍历框架
刷算法题建议从「树」分类开始刷,结合框架思维,把这⼏⼗道题刷完,对于树结构的理解应该就到位了。这时候去看回溯、动规、分治等算法专题,对思路的理解可能会更加深刻⼀些。
二叉搜索树/二叉排序树/二叉查找树
平衡二叉树
【技巧总结】
1. 通过为经典SB树增加一个属性all(用于记录当前节点为根节点的树中具有的节点总数),可以实现计算在当前节点具有多少个重复值。在改进SB树中寻找小于key的节点数量的方法:从根节点开始寻找,如果待寻节点小于当前节点的key,那么往左滑动寻找;如果待寻节点大于当前节点的key,那么往右寻找,结果加入当前节点-当前节点右子节点上的all属性值,因为当前节点(当前累加和)的值是小于所求节点(所求累加和)的;如果带寻节点等于当前节点的key,结果加入当前节点的左子节点上的all属性值。
多路查找树(B树)
B+树
霍夫曼树
线索二叉树
红黑树(AVL树)
平衡树
二叉搜索树在极端情况退化为链表
为了保证性能,就要左右子树结点平衡
AVL 树
Balance Factor(平衡因子)
是它的左子树的高度减去它的右子树的高度(有时相反)。
balance factor = {-1, 0, 1}
通过旋转操作来进行平衡(四种)
根据不平衡时结点情况
LL情况:左旋
RR情况:右旋
LR情况:左右旋
RL情况:右左旋
红黑树
红黑树是一种近似平衡的二叉搜索树(Binary Search Tree),它能够确保任何一个结点的左右子树的高度差小于两倍。具体来说,红黑树是满足如下条件的二叉搜索树:
• 每个结点要么是红色,要么是黑色
• 根节点是黑色
• 每个叶节点(NIL节点,空节点)是黑色的。
• 不能有相邻接的两个红色节点
• 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
前缀树(Trie树、字典树)
【技巧总结】
建立前缀树的方法:第一步,确定前缀树中节点的属性,常用的属性有当前节点值、当前节点的路过次数、下邻节点集合等,对于这些属性的数据类型要根据题目来选取。第二步,建立根节点,然后从根节点开始,依次取各元素加入到以根节点开始的前缀树中,如果当前节点的下邻节点中没有该字符串,那么在当前节点中添加相应的下邻节点,然后移动当前节点来到下邻节点的位置上直到将所有字符串加入为止。第三步,返回前缀树的根节点。
题目86
给你一个字符串类型的数组arr,譬如:String[] arr = { "b\st", "d\", "a\d\e", "a\b\c" }; 把这些路径中蕴含的目录结构给打印出来,子目录直接列在父目录下面,并比父目录向右进两格
100
一个数组的异或和是指数组中所有的数异或在一起的结果。给定一个数组arr,求最大子数组异或和。