1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-11 02:58:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/查询树中环的长度 [cycle-length-queries-in-a-tree].html

64 lines
3.3 KiB
HTML
Raw Normal View History

2022-12-24 21:54:49 +08:00
<p>给你一个整数&nbsp;<code>n</code>&nbsp;,表示你有一棵含有&nbsp;<code>2<sup>n</sup> - 1</code>&nbsp;个节点的 <strong>完全二叉树</strong>&nbsp;。根节点的编号是&nbsp;<code>1</code>&nbsp;,树中编号在<code>[1, 2<sup>n - 1</sup> - 1]</code>&nbsp;之间,编号为&nbsp;<code>val</code>&nbsp;的节点都有两个子节点,满足:</p>
<ul>
<li>左子节点的编号为&nbsp;<code>2 * val</code></li>
<li>右子节点的编号为&nbsp;<code>2 * val + 1</code></li>
</ul>
<p>给你一个长度为 <code>m</code>&nbsp;的查询数组 <code>queries</code>&nbsp;,它是一个二维整数数组,其中&nbsp;<code>queries[i] = [a<sub>i</sub>, b<sub>i</sub>]</code>&nbsp;。对于每个查询,求出以下问题的解:</p>
<ol>
<li>在节点编号为&nbsp;<code>a<sub>i</sub></code>&nbsp;<code>b<sub>i</sub></code>&nbsp;之间添加一条边。</li>
<li>求出图中环的长度。</li>
<li>删除节点编号为&nbsp;<code>a<sub>i</sub></code>&nbsp;<code>b<sub>i</sub></code>&nbsp;之间新添加的边。</li>
</ol>
<p><strong>注意:</strong></p>
<ul>
<li><strong></strong> 是开始和结束于同一节点的一条路径,路径中每条边都只会被访问一次。</li>
<li>环的长度是环中边的数目。</li>
<li>在树中添加额外的边后,两个点之间可能会有多条边。</li>
</ul>
<p>请你返回一个长度为 <code>m</code>&nbsp;的数组<em>&nbsp;</em><code>answer</code>&nbsp;,其中&nbsp;<code>answer[i]</code>&nbsp;是第&nbsp;<code>i</code>&nbsp;个查询的结果<i></i></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/25/bexample1.png" style="width: 647px; height: 128px;" /></p>
<pre>
<b>输入:</b>n = 3, queries = [[5,3],[4,7],[2,3]]
<b>输出:</b>[4,5,3]
<b>解释:</b>上图是一棵有 2<sup>3</sup> - 1 个节点的树。红色节点表示添加额外边后形成环的节点。
- 在节点 3 和节点 5 之间添加边后,环为 [5,2,1,3] ,所以第一个查询的结果是 4 。删掉添加的边后处理下一个查询。
- 在节点 4 和节点 7 之间添加边后,环为 [4,2,1,3,7] ,所以第二个查询的结果是 5 。删掉添加的边后处理下一个查询。
- 在节点 2 和节点 3 之间添加边后,环为 [2,1,3] ,所以第三个查询的结果是 3 。删掉添加的边。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/25/aexample2.png" style="width: 146px; height: 71px;" /></p>
<pre>
<b>输入:</b>n = 2, queries = [[1,2]]
<b>输出:</b>[2]
<b>解释:</b>上图是一棵有 2<sup>2</sup> - 1 个节点的树。红色节点表示添加额外边后形成环的节点。
- 在节点 1 和节点 2 之间添加边后,环为 [2,1] ,所以第一个查询的结果是 2 。删掉添加的边。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>2 &lt;= n &lt;= 30</code></li>
<li><code>m == queries.length</code></li>
<li><code>1 &lt;= m &lt;= 10<sup>5</sup></code></li>
<li><code>queries[i].length == 2</code></li>
<li><code>1 &lt;= a<sub>i</sub>, b<sub>i</sub> &lt;= 2<sup>n</sup> - 1</code></li>
<li><code>a<sub>i</sub> != b<sub>i</sub></code></li>
</ul>