二叉树:(树是一种可以递归定义数据结构)
度:节点的个数
深度:层数(即从根点到叶子节点的层数)
满二叉树:指底层叶子节点左右均存在的二叉树。
完全二叉树:指底层叶子节点的右侧均存在的二叉树。
一般二叉树(非完全二叉树):除了上述的满二叉树,完全二叉树外的其他二叉树。
二叉树的表示方法:
双亲表示法:把树存入列表,再建立一个列表对应存数父节点的索引(根节点对应存-1)
孩子表示法:把树存入列表,再建立一个列表对应存孩子节点的地址,无子节点的后为None
双亲孩子表示法:把双亲表示法和孩子表示法结合起来(建立三个列表)
二叉树转成线性:
先序遍历:先访问根节点,再先序遍历左子树,再先序遍历右子树
中序遍历:先中序遍历左子树,再访问根节点,再中序遍历右子树
后序遍历:先后序遍历左子树,再后序遍历右子树,再访问根节点
注意:根据先序/后序和中序可以求出一个二叉树
mysql搜索引擎,的底层原理(目前常用版本)使用的就是B+tree。
搜索引擎:
1.InnoDB(聚簇索引:行级锁)只有一个*.ibd文件
可靠性高,包含事务处理和外键支持(不保存表的具体行数),在执行select count(*) fromtable时,需要扫描一遍整个表。AUTO_INCRMENT类型中,必须包含只有该字段索引,没有办法进行联合索引。
2.MYSAM(非聚簇索引,需要回航,表级锁),有有三个文件 .MYI,.MYD,*.MYF;不支持事务等高级处理。但是myisam类型的表调的是性能,它的执行速度比InnoDB类型更快。执行select count(*) fromtable时,只需要读出保存好的行数就行啦。 AUTO_INCRMENT类型(主键)中,可以和其他字段建立联合索引。
大根堆,小根堆的概念:
1.大根堆 :一颗完全二叉树,满足任意一个节点都比其孩子节点大
2.小根堆:一颗完全二叉树,满足任意一个节点都比其孩子节点小
B+tree 简单来讲就是在叶子节点的位置建立链表。。。