自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 7.20二叉树的最近公共祖先

本题目要采用后序遍历,先通过遍历每一个分支,如果遇到目标节点,我们就向上返回,其实这里的返回有两种返回,第一种就是如果遇到p或者q的返回(注意相当于祖先的下一层),还有一种就是祖先这一层的返回,即如果左右的返回值都不为空,我们就找到了这个公共祖先。还有一个点,如果找到了p或者q(在一个分支上),我们就将左分支或者右分支返回,最后把祖先节点层层向上返回。

2025-07-21 12:09:53 149

原创 7.19刷题:用中序数组和后序数组建立二叉树

整体的思路是,通过后序遍历找到根节点,然后中序遍历里面通过根节点把数组一分为二,前面为左子树,根节点后面为右子树,然后因为左子树的节点数是固定的(关键),所以我们可以利用上一步在中序数组的遍历知道左子树的节点个数,进而去分割后后续数组,并且重复上述两个步骤即可。另外注意一个小细节,中序数组的分割时,要跳过中间的根节点,即注意代码中的加一。

2025-07-19 23:24:15 208

原创 7.16哈夫曼树(下)

但接下来,我们面临一个问题,是否要用等长的字符串,例如都用2位二进数表示。但这显然是不合理的,因为B只出现了一次,他在这个字符串中的地位(权重)远远小于A,如果A只用一个二进制数,而B用两个二进制数,则只需要8个二进制数,这样也可以做到转化的效果(即转化的唯一性)还能减少一点空间。其实为了保证没有歧义,就必须满足如下充要条件:任一字符的编码都不是另一个字符的编码的前缀(这种编码我们称作前缀编码),而在哈夫曼编码中,没有一片树叶是另一个树叶的祖先,所以每个叶节点的编码就不可能是其他叶子节点的前缀。

2025-07-16 21:48:15 314

原创 7.15二叉树路径和

第一段代码处理逻辑有误,多减了一次父节点的值。

2025-07-15 22:38:28 174

原创 7.13哈夫曼树(上)

哈夫曼树就是带权路径长度最小的树,也称最优树(注意,这里的最优是在度数相同的树中路径最短)下文中提到的哈夫曼树均为最优二叉树。首先了解什么是带权路径长度。每个节点都会带有“权值”,而树中所有叶子节点的权值乘以乘以路径长度之和即为一棵树的带权路径长度。3:之后把这两个节点删除,将新的树加入到列表中(新树的权值是左右两个节点的权值之和)。2:若原来有n个节点,则生成的哈夫曼树有2n-1个节点,因为比较了n-1次,相当于添加了n-1个节点。2:在所有节点中找出权值最小的两个,作为新树的左右节点(选用两小造新树)

2025-07-13 22:53:02 244

原创 7.12树与二叉树的关系,以及森林与二叉树。刷题:求二叉树的深度(代码随想录)

树的存储结构我们也可以仿照二叉树,用二叉链表实现,具体实现为,左指针指向第一个孩子节点,右指针指向相邻的兄弟节点。这里以普通的树转化为二叉树为例,“兄弟相连留长子”,即先在各个兄弟之间加一条线,然后对于每个节点 ,除了左孩子外,去除与其余孩子之间的关系。这里求最大深度采用了后序遍历,即左右中的遍历顺序,可以理解为每一棵字数在不断地把自身的高度往上传。相比与前序遍历,省去了复杂的回溯过程。首先,树与二叉树的区别在于,二叉树是分左右子树的,而普通的树的孩子节点并没有区分。

2025-07-12 21:47:44 337

原创 7.11线索二叉树学习,对称二叉树(跟着代码随想录敲)

但这么做容易与左右孩子搞混,所以我们加入一个标记位,如left tag和right tag,如果tag等于0,说明指向的是左右孩子,如果tag等于1,说明指向的是前驱或者后继。现在去理清一下思路,其实很简单,就是通过递归不断去判断外层和内层是否一样,卡哥提到的遍历顺序说这里是后序遍历,个人理解的话意思应该是处理(判断是否对称) 的顺序是后序,而非传统意义上的后序遍历,因为从遍历顺序上看,其实更像前序,但他并没有对根节点进行处理。这么做的好处是方便查找一个节点的前驱和后继。而是以他为跳板继续往下走。

2025-07-11 21:48:07 272

原创 7.10二叉树的层序遍历

采用队列实现广度优先搜素,这种解法的妙处在于用size变量控制每层弹出的元素数量,注意最后把一维数组压入到二维数组的时候是放在while循环后面。

2025-07-10 21:58:37 326

原创 7.9二叉树遍历(前序)

第一次了解到return{...}的语法,即“列表初始化”auto:自己推断变量类型,此处的iter为迭代器类型。map的插入有点特殊;

2025-07-09 21:56:36 331

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除