书中第介绍了有根树,简单介绍了二叉树和分支数目无限制的有根树的存储结构,而没有关于二叉树的遍历过程。为此对二叉树做个简单的总结,介绍一下二叉树基本概念、性质、二叉树的存储结构和遍历过程,主要包括先根遍历、中根遍历、后根遍历和层次遍历。 1、二叉树的定义 二叉树(Binary Tree)是一种特殊的树 ...
分类:
其他好文 时间:
2020-06-22 18:38:21
阅读次数:
118
定义 对于一颗n个节点的无根树,找到一个点,使得把树变成以该节点为根的有根树时,最大节点数最少。换句话说,删除这个节点后最大连通块(一定是树)的节点数最少。 分析 该问题跟树的最大独立集问题类似。先任选一个节点作为根,把无根树变成有根树,然后设d[i]表示以i为跟的子树的节点个数。只需要一次DFS。 ...
分类:
其他好文 时间:
2020-06-20 17:06:53
阅读次数:
65
概述篇 LCA (Least Common Ancestors) ,即最近公共祖先,是指这样的一个问题:在一棵有根树中,找出某两个节点 u 和 v 最近的公共祖先。 LCA 可分为在线算法与离线算法 **在线算法:**指程序可以以序列化的方式一个一个处理输入,也就是说在一开始并不需要知道所有的输入。 ...
分类:
其他好文 时间:
2020-06-16 23:42:20
阅读次数:
236
题目 正解 首先,这是一棵有根树,其次,很明显每只怪物都要父亲怪物被击杀后才可以被击杀,我们不妨想问题的时候从简单的出发,就是:假如没有父亲这个限制,我们应该怎样打怪物呢,首先我们可以把怪物分成两类: $a \lt b$和 $a \geq b$的,前面一类打完不会掉血,后面则会掉血,那么这时候肯定先 ...
分类:
其他好文 时间:
2020-06-13 21:40:34
阅读次数:
65
树链剖分主要用来维护树的路径信息,大致思路是把一棵树变成一个特定的序列,将树上的问题转化成线性结构上的问题,然后用数据结构维护在这个序列 引例: 树链剖分的思想与本例类似 有一棵n个节点的有根树,每个节点都有一个权值 一共有m次更新/查询 更新:将节点x的权值修改为y 查询:查询x以节点为根的子树中 ...
分类:
其他好文 时间:
2020-05-15 00:24:39
阅读次数:
54
题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root =?[3 ...
分类:
其他好文 时间:
2020-05-10 22:46:31
阅读次数:
55
描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root =? ...
分类:
其他好文 时间:
2020-05-10 21:38:39
阅读次数:
53
题目地址:https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/ 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p ...
分类:
编程语言 时间:
2020-05-10 19:24:17
阅读次数:
55
题目描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3 ...
分类:
其他好文 时间:
2020-05-10 19:13:41
阅读次数:
56
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root = [3,5,1, ...
分类:
其他好文 时间:
2020-05-10 19:04:48
阅读次数:
56