【LeetCode】8.二叉树系列——基础
总目录:
0.理论基础
0.1.种类
满二叉树
如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在最下层,则这棵二叉树为满二叉树。也可以说深度为k,有2^k-1个节点的二叉树
完全二叉树
除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。
二叉搜索树
二叉搜索树是有数值的了,二叉搜索树是一个有序树。
(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)它的左、右子树也分别为二叉排序树。
二叉平衡树
又称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵二叉平衡树。
C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn。
注意,unordered_map、unordered_set,unordered_map、unordered_map底层实现是哈希表,所以时间复杂度是1。
0.2.存储方式
二叉树可以链式存储,也可以顺序存储。
链式存储
链式存储方式就用指针指向子树
顺序存储
顺序存储的方式就是用数组+索引。如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。
0.3.遍历方式
大类上分为深度优先搜索和广度优先搜索,可以再细分为前/中/后序搜索和层次遍历。
DFS(DeepFirstSearch)深度优先搜索
前/中/后序遍历,指的就是中间节点的遍历顺序。
(1)前序遍历:中左右
(2)中序遍历:左中右
(3)后序遍历:左右中
BFS(BroadFirstSearch)广度优先搜索
一般使用队列来实现,这也是队列先进先出的特点所决定的。具体看代码。
0.4.数据结构
1 struct TreeNode { 2 int val; 3 TreeNode *left; 4 TreeNode *right; 5 TreeNode(int x) : val(x), left(NULL), right(NULL) {} 6 };
0.5.问题归纳
本文作者:啊原来是这样呀
本文链接:https://www.cnblogs.com/OhOfCourse/p/16986103.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步