首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检索树中作为另一个子节点的所有节点

检索树中作为另一个子节点的所有节点
EN

Stack Overflow用户
提问于 2008-09-17 01:44:12
回答 4查看 471关注 0票数 0

我有一个web系统,它有一个经典的父子菜单保存在数据库中,字段id作为主键,parent_id指向自己的菜单。(是的,我知道这不能很好地扩展,但这是另一个话题)。

因此,对于这些记录(id-parent_id对):

代码语言:javascript
运行
复制
0-7 0-4 4-9 4-14 4-16 9-6

我有一棵树:

代码语言:javascript
运行
复制
0
├ 7
└ 4
  ├ 9
  | └ 6     
  ├ 14
  └ 16

我需要隐藏一个顶级节点,所以我必须列出该节点的所有子节点,即对于4,它们将是(9,6,14,16)。顺序并不重要。

我很困惑..。这是否适用于经典的树问题?或者它是一个图1?

我如何构建这个结构并用php解决这个问题呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-09-17 01:48:12

这是使用递归的绝佳机会!

伪代码:

代码语言:javascript
运行
复制
nodeList = {}
enumerateNodes(rootNode, nodeList);

function enumerateNodes(node, nodeList) {
   nodeList += node;
   foreach ( childnode in node.children ) {
       enumerateNodes(childnode, nodeList);
   }
}

编辑:未注意到您的树采用相邻列表格式。在我开始使用它之前,我可能只会将它构建到一个实际的树数据结构中。只需遍历所有对(第一次看到节点时创建节点)并链接它们。我想这应该很简单。

票数 1
EN

Stack Overflow用户

发布于 2008-09-17 01:53:42

相邻列表模型很难处理。我所在的公司现在将它们用于层级结构,这会造成很大的麻烦。我已经成功地为以前的雇主使用了Celko的嵌套集合模型,它们在创建、维护和使用层次结构(树)方面效果很好。

我找到了描述它们的链接:http://www.intelligententerprise.com/001020/celko.jhtml

但我也推荐Joe Celko写的"SQL for Smarties: Advanced SQL Programming“一书,该书涵盖了嵌套集。

Joe Celko's SQL for Smarties: Advanced SQL Programming

Joe Celko's Trees and Hierarchies in SQL for Smarties

票数 2
EN

Stack Overflow用户

发布于 2008-09-17 01:54:53

这是一个图形问题。查看BFS(breadth first search)DFS(depth first search).。你可以在谷歌上搜索这些术语,并在web上找到数百种实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/79041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档