1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-10 18:48: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.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>