摘要: 027.归并排序 归并排序就是二叉树后序遍历 二叉树后序遍历 先遍历左右子树,再处理根节点 可以获取左右子树的信息 void postorder(TreeNode*root){ if(root==nullptr){ return; } //先处理左右子树 postorder(root->left); postorde 阅读全文
posted @ 2025-12-28 23:55 射杀百头 阅读(27) 评论(0) 推荐(0)
摘要: 026.二叉搜索树迭代器 升序遍历一棵二叉搜索树 API: BSTIterator(TreeNode* root)初始化 int next() 将指针向右移动,然后返回指针处的数字 bool hasNext()如果向指针右侧遍历存在数字,则返回 true 否则返回 false int peak() 返回当前指针处的数字 /* 阅读全文
posted @ 2025-12-27 19:47 射杀百头 阅读(22) 评论(0) 推荐(0)
摘要: 025.抽象打表 小红写谱 nowcode 先看抽象打表做法 首先注意到重复的按键可以忽略,只要把它们连着排贡献就都是0 这样就变成了一个长度最大为 8 的数组 对于 1 ~ 8 的所有组合 :2^8 去掉空集就是 2^8 - 1 对一个长度为 n 的组合它的所有排列数 : n ! 总代价为 \[\sum_{i=1} 阅读全文
posted @ 2025-12-26 22:10 射杀百头 阅读(15) 评论(0) 推荐(0)
摘要: 024.二叉树层序遍历 二叉树的层序遍历就是Bfs(广度优先搜索) 因为步长一致 框架: queue<TreeNode*>qu; qu.push(root); while(!qu.empty()){ int siz=qu.size();//当前层结点数量 for(int i=0;i<siz;++i){//当前层结点全部出队 阅读全文
posted @ 2025-12-26 18:47 射杀百头 阅读(8) 评论(0) 推荐(0)
摘要: 023.二叉树分裂问题 二叉树分裂问题常见操作: 将某个或某些子树单独取出 删除某个结点,使二叉树分裂成三部分(左子树,右子树,其它部分) 整体与局部 通常我们自底向上,找到需要处理的结点 这时我们天然地拥有以当前结点为根的子树的信息 如果我们提前预处理出整棵树的信息 并且我们需要研究的性质满足区间可加性,我们就可以直接算 阅读全文
posted @ 2025-12-25 20:44 射杀百头 阅读(8) 评论(0) 推荐(0)
摘要: 022.二叉树删除问题 视角引入 如果让你在二叉树上删除某个结点,比较容易想到的是修改它的父结点 将其父节点的指针改为指向空 这需要我们站在父结点的位置进行操作,这会面临一些问题: 我们相当于直接删除了一棵子树,这将丢失大量信息,除非你提前遍历一遍二叉树,将这些信息储存起来,不过这样会产生额外的空间时间浪费,实现起来也比较 阅读全文
posted @ 2025-12-25 19:55 射杀百头 阅读(7) 评论(0) 推荐(0)
摘要: 021.二叉树匹配问题续 对称二叉树 题目链接 leetcode 101 题意 给你一个二叉树的根节点 root , 检查它是否轴对称 思路 判断两颗树是否相等,我们递归检查它们的左子树,右子树是否对应相等 bool isSameTree(TreeNode* p, TreeNode* q) { if(p==nullptr&& 阅读全文
posted @ 2025-12-24 10:49 射杀百头 阅读(6) 评论(0) 推荐(0)
摘要: 020.二叉树匹配问题 在树中查找子树 题目链接 leetcode 572 题意 给你两棵二叉树 root 和 subRoot 检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树 如果存在,返回 true ,否则,返回 false 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有 阅读全文
posted @ 2025-12-23 22:09 射杀百头 阅读(5) 评论(0) 推荐(0)
摘要: 019.unsigned溢出 溢出模式 有符号整数溢出是未定义行为,可能导致负数或错误结果 long long M = 9223372036854775807; cout << M + 1; //最大值 + 1 (通常变成最小值): -9223372036854775808 long long m=-92233720368547 阅读全文
posted @ 2025-12-23 10:42 射杀百头 阅读(8) 评论(0) 推荐(0)
摘要: 018.递归分治 分而治之 分治是一种思想 将大问题分解成子问题 比较经典的分治:归并排序,二叉树后序位置的一系列操作 归并排序: const int MAXN=91; int nums[MAXN],n,temp[MAXN]; void mergesort(int l,int r) { if(l>=r)return 阅读全文
posted @ 2025-12-22 00:17 射杀百头 阅读(18) 评论(0) 推荐(0)