一 序
本文属于极客时间-算法训练营 学习笔记。
二树
作为铺垫,覃超老师先回顾了上节课的链表的特点。访问慢。跳表对他进行加速。如果吧一个指向延伸为多个指向,就有了树的概念。
看图可知,有些概念:根节点,子节点,关系:父子,兄弟,层级:level,左右,子树等。不展开。
树跟图的区别就是有没有环。
关于树的发散引申:
1, 斐波那契数列递归:本身扩展开就是状态树。
2. 实际生活中:以棋类为代表,从哪个第一颗棋子开始,不断的扩散,直到叶子节点(终态:赢、输、和),从树状空间寻求最优解。
树的遍历
树的遍历通常方式就是递归。简洁。
三 二叉搜索树
3.1 常见操作:
搜索
插入
删除:
时间复杂度为O(logN).
搜索的过程,利用了有序的特点。先和根节点相比,每次能减少一半的搜索量,所以时间复杂度跟二分查找一样。
插入的过程:找到节点应该存在的位置,
删除:
a、叶子节点的删除
b、根节点或者某子树的根节点(一般情况下找右子树中第一个和此节点相近的节点替换)
这里文字看起来不如看视频中动画容易理解。
下边为特殊情况:时间复杂度不是O(logn), 而是O(N)~ 相当于链表