代码随想录:二叉树知识清单
二叉树基础知识
深度:对于任意节点R,R的深度为从根到R的唯一路径长,根的深度为0(或者1);
高度:对于任意节点R,R的高度为从R到一片树叶的最长路径长,所有树叶的高度为0(或者1);
结点的层次:规定根结点在1层,其它任一结点的层数是其父结点的层数加1
树的深度:树中所有结点中的最大层次是这棵树的深度
二叉树的深度
最大深度 / 最小深度 其实就是根节点到叶子节点的 最大距离 / 最小距离
满二叉树和完全二叉树
满二叉树
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结 点总数是(2^k) -1 ,则它就是满二叉树。 一颗树深度为h,最大层数为k,深度与最大层数相同,k=h; 第k层的结点数是: 2^(k-1) 总结点数是: 2^k-1 (2的k次方减一) 总节点数一定是奇数。
完全二叉树
完全二叉树的节点数是任意的,从形式上讲它是个缺失的的三角形,但所缺失的部分一定是右下角某个连续的部 分,最后那一行可能不是完整的,对于k层的完全二叉树,节点数的范围2^ (k - 1) -1 < N< 2^k - 1; 在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点,则此二叉树为完全二叉树。
二叉搜索树和平衡二叉搜索树
搜索树和一般的二叉树区别在于:有序
排序规则如下:
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 它的左、右子树也分别为二叉排序树
如果二叉搜索树的左右两个子树的高度差的绝对值不超过1,并且左右两个字数都是平衡二叉树,那么这就是一棵平衡二叉搜索树
二叉树的存储方式
- 链式存储用指针
- 顺序存储用链表
二叉树的遍历方式
- 深度优先遍历 DFS
- 前序遍历(递归法,迭代法)
- 中序遍历(递归法,迭代法)
- 后序遍历(递归法,迭代法)
- 广度优先遍历 BFS
- 层次遍历(迭代法)
二叉树的定义-手撸结构体
1 2 3 4 5 6 7 | struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode( int x) : val(x), left(NULL), right(NULL){} }; |
二叉树用列表生成
1 2 3 4 5 6 7 8 9 10 11 12 | //vector 前序遍历 生成树 TreeNode* buildtree(vector< int > array, int index) { TreeNode* root = nullptr ; if (index < array.size() && array[index] != NULL) { root = new TreeNode(array[index]); root->left = buildtree(array, 2 * index + 1); root->right = buildtree(array, 2 * index + 2); } return root; } |
根据Cral哥整理的题目,二叉树知识有以下几类:
二叉树的遍历方式
https://www.cnblogs.com/PiaYie/p/15951793.html
二叉树的属性
https://www.cnblogs.com/PiaYie/p/15965325.html
二叉树的修改与改造
https://www.cnblogs.com/PiaYie/p/15965348.html
二叉树公共祖先问题
二叉搜索树的属性
二叉搜索树的修改与构造
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-03-01 使用位运算替代模运算,为了高效做模除最好选择mod除(2^n)