https://www.bilibili.com/video/BV1Hy4y1t7ij/?spm_id_from=333.337.search-card.all.click&vd_source=168d5f618ec1a68e1f162d91a35a12b6
完全二叉树的底部一定是从左到右是连续的。满二叉树一定是完全二叉树。
二叉搜索树:左边左子树的所有节点都小于这个中间节点,右边右子树的所有节点都大于中间节点。
--搜索一个节点的时间复杂度是logN级别的
平衡二叉搜索树示例:下面是一个平衡二叉搜索树
二叉树的遍历,其实是图论里面的两大类搜索方式,深度和广度优先搜索。深度优先搜索有前、中、后序遍历。广度优先搜索里边是层序遍历。
深度优先搜索,一般用递归的方式来实现。前/中/后序遍历都是深度优先搜索,都是通过递归方式实现。(也可用迭代法实现前中后序遍历)
广度优先搜索,一层一层或一圈一圈的去遍历。常见方式是层序遍历。二叉树的层序遍历是广度优先搜索的一种。层序遍历就是迭代法,层序遍历就是用一个队列来实现对二叉树一层一层的搜索。在图论里广度优先搜索也是使用队列,因为队列的先进先出的特点符合我们一层一层遍历的需求。
二叉树存储方式,链式存储和线性存储(如用数组存储)。
--编程语言在实现递归的过程中,是用栈的这种结构来实现。
基础部分:
https://www.bilibili.com/video/BV1s54y1U7V3/?spm_id_from=333.337.search-card.all.click&vd_source=168d5f618ec1a68e1f162d91a35a12b6
节(结)点的度,节点所引出的分支的个数
树的度,树中所有节点的最大分支数
叶子节点,度为0的节点称为叶子节点。
双亲和孩子
树的存储结构
二叉树定义
满二叉树(可看成完全二叉树的一种),除了最底层节点外,所有节点都有左右孩子
完全二叉树,可理解成由满二叉树,从右到左,依次删除最底层的节点。(满二叉树一定是完全二叉树。)
推导:
高度有两种取值策略
向上取整
向下取整
推导推广
完全二叉树,左右孩子节点位置推算
引出不同的遍历次序(前中后序遍历,针对二叉树)
对于树,没有中序遍历说法,只有前后序遍历
树和该树转换后的“二叉树”的一些遍历结论:
树和转换后的“二叉树”的先序遍历的节点访问顺序是一样,若要对树进行先序遍历,可对转换后的“二叉树”进行先序遍历即可。
树的后序遍历等效于转换后的“二叉树”的中序遍历
二叉树遍历的整体框架(1,2,3处表在不同位置代入visit(p)代码),该图想表明二叉树遍历可用递归来做