mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-11 02:58:13 +08:00
64 lines
3.3 KiB
HTML
64 lines
3.3 KiB
HTML
|
<p>给你一个整数 <code>n</code> ,表示你有一棵含有 <code>2<sup>n</sup> - 1</code> 个节点的 <strong>完全二叉树</strong> 。根节点的编号是 <code>1</code> ,树中编号在<code>[1, 2<sup>n - 1</sup> - 1]</code> 之间,编号为 <code>val</code> 的节点都有两个子节点,满足:</p>
|
|||
|
|
|||
|
<ul>
|
|||
|
<li>左子节点的编号为 <code>2 * val</code></li>
|
|||
|
<li>右子节点的编号为 <code>2 * val + 1</code></li>
|
|||
|
</ul>
|
|||
|
|
|||
|
<p>给你一个长度为 <code>m</code> 的查询数组 <code>queries</code> ,它是一个二维整数数组,其中 <code>queries[i] = [a<sub>i</sub>, b<sub>i</sub>]</code> 。对于每个查询,求出以下问题的解:</p>
|
|||
|
|
|||
|
<ol>
|
|||
|
<li>在节点编号为 <code>a<sub>i</sub></code> 和 <code>b<sub>i</sub></code> 之间添加一条边。</li>
|
|||
|
<li>求出图中环的长度。</li>
|
|||
|
<li>删除节点编号为 <code>a<sub>i</sub></code> 和 <code>b<sub>i</sub></code> 之间新添加的边。</li>
|
|||
|
</ol>
|
|||
|
|
|||
|
<p><strong>注意:</strong></p>
|
|||
|
|
|||
|
<ul>
|
|||
|
<li><strong>环</strong> 是开始和结束于同一节点的一条路径,路径中每条边都只会被访问一次。</li>
|
|||
|
<li>环的长度是环中边的数目。</li>
|
|||
|
<li>在树中添加额外的边后,两个点之间可能会有多条边。</li>
|
|||
|
</ul>
|
|||
|
|
|||
|
<p>请你返回一个长度为 <code>m</code> 的数组<em> </em><code>answer</code> ,其中 <code>answer[i]</code> 是第 <code>i</code> 个查询的结果<i>。</i></p>
|
|||
|
|
|||
|
<p> </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> </p>
|
|||
|
|
|||
|
<p><strong>提示:</strong></p>
|
|||
|
|
|||
|
<ul>
|
|||
|
<li><code>2 <= n <= 30</code></li>
|
|||
|
<li><code>m == queries.length</code></li>
|
|||
|
<li><code>1 <= m <= 10<sup>5</sup></code></li>
|
|||
|
<li><code>queries[i].length == 2</code></li>
|
|||
|
<li><code>1 <= a<sub>i</sub>, b<sub>i</sub> <= 2<sup>n</sup> - 1</code></li>
|
|||
|
<li><code>a<sub>i</sub> != b<sub>i</sub></code></li>
|
|||
|
</ul>
|