[英]Given a tree, find the kth node in the path from node 'a' to node 'b' in Log(n)?
給定一棵樹,我需要在從“ a”到“ b”的路徑中找到第k個節點。 這意味着我需要在從節點“ a”到節點“ b”的路徑中的“ kth”位置找到該節點。 我在考慮最低共同祖先和/或強光分解的路線,但是我不確定這是否是這樣做的方式。 朝着正確方向的任何指導表示贊賞。
細節:
由於查詢數量很大,因此無法選擇將BFS應用於每個查詢(從“ a”到“ b”的第k個節點)。
做最普通的祖先,並為每個節點保留其深度(到根的距離)。
接下來找出第k個節點在a到lca還是lca到b部分。 深度差是它們之間節點的數量,因此,如果depth[a] - depth[lca] > k
則該節點位於lca-b部分。
如果節點在a到lca部分,則只需找到a的第k個祖先。 應該使用您預先計算的LCA數據為log(N)。
如果該節點位於b到lca部分,則可以計算k',它是第k個節點到b的距離( k' = 1 + depth[a] + depth[b] - 2*depth[lca] - k)
),然后獲得b的k'祖先(同樣很容易獲得LCA數據)。
總體而言,所有查找都是logN,其他步驟是恆定的,因此您對每個查詢執行O(LogN)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.