为具有多个节点的树提供数据结构,并编写算法以查找节点的k
个祖先。
数据结构可以如下吗?
struct node
{
int data;
int n;
struct node** child;
}
我对找到k
祖先感到困惑。
答案 0 :(得分:1)
想象一下这样的树:
h
d l
b f j n
a c e g i k m o
和这样的方法:getParent(int k,char value)
If my call was getParent(3, 'm') it would return 'h'
The search would go: h->l->n->m; back three spots from m is h
If my call was getParent(2, 'e') it would return 'd'
The search would go: h->d->f->e; back two spots from e is d
答案 1 :(得分:1)
是的,提供的结构将是一个多子(k-ary)树。
但是,使用这种结构,你不会得到一个特别有效的算法来找到第k个祖先 - 你必须递归地浏览整个树(从根)以找到所需的元素,并试图找到第k个祖先。
0
。-1
):
k
,我们就会找到k
- 祖先。+1
。-1
。运行时间为O(n)
,其中n
是树中的节点数。
如果我们允许使用其他结构:
除了/代替子节点指针,我们可以为每个节点存储父节点指针。然后我们可以简单地迭代地查看父节点,直到达到所需的深度。
运行时间为O(k)
,我们想要找到第k个祖先。