思考了三天没有什么想法然后搜了一下,发现了这个: Level ancestor problem 研读了一番之后发现了使用一个神奇的数据结构,使得每一次的查询可以降为long(P)的复杂度,这样问题就迎刃而解了。 这个奇特的数据结构,我这样描述: 对树进行DFS,记录下每一条路径e[i]。 之后开一个node[i]标记每个节点所在的边号(inde...
最后就可以使用kthAncestor方法查找节点的Kth祖先了: intkthAncestor=tree.kthAncestor(u,k); 时间复杂度 使用二值提升技术的N元树中节点的Kth祖先算法,时间复杂度为O(logN),相比于递归查找的O(N)提高了不少效率。因此,当我们需要对树进行大量查找操作时,可以考虑使用这种算法来优化程序。
if R == K-1: current node is the kth ancestor if R > K-1: kth ancestor is in right subtree if R < K-1: kth ancestor is in left subtree, when you go left, you're objective changes to finding the (K — R — 1)th node (as K nodes from the right and root node were disc...
def kthAncestor(u, k): if depth[u] < k: return -1 for i in range(LogN + 1): if k & (1 << i): u = parent[u][i] return u Markdown 代码片段 ## 使用二值提升技术的N元树中节点的Kth祖先 ### 介绍 在N元树中,每个节点可能会有多个子节点。当需要快速查找某个节点的Kth祖先时,...
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 classSolution { publicintfindKthLargest(int[] nums,intk) { mergeSort(nums,0, nums.length-1); intcount = nums.length; ...
co0oder 粉丝- 1 关注- 0 +加关注 0 0 升级成为会员 « 上一篇: LeetCode 236. Lowest Common Ancestor of a Binary Tree » 下一篇: LeetCode 235. Lowest Common Ancestor of a Binary Search Tree posted @ 2016-02-24 16:04 co0oder 阅读(151) 评论(0) 编辑 收藏 举报 刷新...
长链剖分也是一种树上的链剖分的方法。与重链剖分不同,长链剖分对于树上的每个点,取子树深度最大的儿子,向它连重边,其他的儿子向它连轻边。容易发现一个点所在的重链的长度至少为它子树的深度。 利用这个性质可以O(nlogn)O(nlogn)预处理,O(1)O(1)求树上任意节点的k级祖先。比如当前要询问点x的k级...