添加树视图分支的最有效算法

发布于 2024-12-10 09:09:13 字数 463 浏览 0 评论 0原文

我必须构建将分支(节点)添加到树视图中。我正在努力确定最低 O(n) 技术是什么。

我的数据如下所示:

Id  ParentId    Value

0   null        Bob
1   0           Amy
2   1           Susan
3   1           Matt
4   2           Keith
5   4           Craig
6   4           Derrick

所以树看起来像:

Tree

我能想出的只是一个 n^2 算法对于每个条目,它会扫描所有其他条目以查看它们是否属于子节点。 我还在添加条目时从数组中删除要扫描的条目。所以如果记忆有效的话(可能不会),它比 n^2 略小。

还有更好的技术吗?

I have to build add the branches (nodes) to a tree view. I'm struggling to determine what the lowest O(n) technique is.

My data presents as follows:

Id  ParentId    Value

0   null        Bob
1   0           Amy
2   1           Susan
3   1           Matt
4   2           Keith
5   4           Craig
6   4           Derrick

So the tree would look like:

Tree

All I can come up with is an n^2 algorithm which for every entry scans every other entry to see if they belong as a sub node.
I also am removing entries from the array to scan as they are being added. So it's a little less than n^2 if memory serves (probably not).

Are there any better techniques?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无名指的心愿 2024-12-17 09:09:13

假设您的语言具有某种列表/向量/可调整大小的数组类型,这非常简单。

为每个 ID 创建一个空列表。迭代每一行,如果 ParentId 不为 null,则将该 Id 添加到 ParentId 的列表中。

现在,您可以在 O(n) 时间内获得每个条目的子项。

Assuming your language has some sort of list/vector/resizable array type, this is pretty easy.

Make an empty list for each ID. Iterate over each row, and if ParentId is not null, add the Id to the ParentId's list.

You now have the children for each entry in O(n) time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文