并查集结构 解决部分节点存在先后顺序的问题。 初始化 把每个点所在集合初始化为其自身。 通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。 查找 查找元素所在的集合,即根节点。 合并 将两个元素所在的集合合并为一个集合。 class UnionFind ...
分类:
其他好文 时间:
2021-01-19 12:05:28
阅读次数:
0
124. 二叉树中的最大路径和 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。 示例 1: 输入:root = [1,2,3 ...
分类:
其他好文 时间:
2021-01-19 12:04:37
阅读次数:
0
此篇博客主要记录使用递归求解的树相关的算法题。 一、二叉树的最大深度 104. 给定一个二叉树,找出其最大深度。 (easy) 2021-01-13 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例:给定二叉树 [3,9,20,null,null ...
分类:
其他好文 时间:
2021-01-15 12:07:22
阅读次数:
0
链接: 题目 题目大意: 一颗树,除根节点外初始都是白点,根节点是黑点。 每次染黑一个结点或者询问一个结点的最近黑色祖先。 \(1\leq n\leq 10^5\) 正文: 可以反着做。就是每次染白一个点。那么设 \(lba_i\) 表示第 \(i\) 点的最近黑色祖先,那么每次染色的时候,就把 \ ...
分类:
其他好文 时间:
2021-01-11 11:31:00
阅读次数:
0
给你二叉树的根节点 root ,返回它节点值的?前序?遍历。 示例 1: 输入:root = [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 示例 4: 输入:root = [1,2] 输出:[1 ...
分类:
其他好文 时间:
2021-01-08 11:19:55
阅读次数:
0
本文的内容是如何通过二叉树实现一个最大堆, 实现原理方面参考了这篇文章. 一. 堆的数据结构 1. 数据结构分析 堆的本质就是一颗二叉树, 这颗二叉树必须具备以下两个性质: 1). 对于最大堆来说, 二叉树根节点的值不小于任何子节点, 其所有子树也符合这一特征, 最小堆则相反; 2). 堆是一颗完全 ...
分类:
编程语言 时间:
2021-01-06 11:45:46
阅读次数:
0
144. 二叉树的前序遍历 地址:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/ //给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 // // // // 示例 1: // // //输入:root = ...
分类:
其他好文 时间:
2021-01-05 11:30:49
阅读次数:
0
哈夫曼编码是一种变长编码,根据字符频率确定编码的长度。在学习数据结构时,我们知道,通过贪心的策略自底向上构造二叉树,最后得到哈夫曼树。从根节点遍历,便可以得到编码。 本文给出了经典教材《数据结构》一书上算法6.12的具体实现细节。 类型定义 构造二叉树的过程为:初始为全部字符的 \(n\) 个叶子节 ...
分类:
其他好文 时间:
2020-12-31 12:06:38
阅读次数:
0
题目链接:重建二叉树 思路:根据前序和中序的排列规律,在中序遍历时,根节点的左边是左子树结点,右边是右子树结点,而前序遍历中首先出现根结点,紧接着根结点的是左子树结点,然后是右子树结点。所以,我们只需要确定在前序和中序中根结点的位置,通过根结点可以知道左子树和右子树结点的位置,该问题便转化为根据左右 ...
分类:
其他好文 时间:
2020-12-31 11:57:08
阅读次数:
0
☆☆☆思路:剑指18.二叉树的镜像 方法1:递归。二叉树此类递归问题,要以根节点为目标点进行分析。 思路1:首先分别翻转根节点的左右子树,然后交换左右子树的位置即可。 思路2:也可以先交换左右子树的位置,然后再分别翻转根节点的左右子树。 方法2:BFS层序遍历 层序遍历树的所有节点,然后交换其左右节 ...
分类:
其他好文 时间:
2020-12-28 11:24:22
阅读次数:
0