2010-11-07 88 views
-6

我的数据结构是这样的:二进制计数

+-------------+------+-------+ 
| USERID (PK) | LEFT | RIGHT | 
+-------------+------+-------+ 
|  001  |  | 002 | 
|  002  | 003 | 004 | 
|  003  | 005 |  | 
|  004  |  |  | 
|  005  | 008 | 007 | 
|  008  |  |  | 
|  007  | 009 |  | 
|  009  |  |  | 
+-------------+------+-------+ 

这个数据结构表示二进制树。每行代表一个节点,每个节点都有一个USERIDLEFTRIGHT列中的条目通过参考USERID s代表该节点的两个子节点。我想遍历这棵树。

我正在使用Visual Studio 2005和Access数据库。

+1

-1因为每个单词都以一个首都为起点,而且它非常讨厌尝试并找出你想说的东西。 – zzzzBov 2010-11-07 08:42:06

+0

尝试。使用。一些。标点。如。 – 2010-11-07 08:57:24

+4

我试过编辑这个问题,以便读起来更容易,但是你仍然缺少一些信息 - 比如你使用什么语言以及如何遍历树(即,预期的顺序是什么)遍历?)。将来,请尝试格式化和说明您的问题以提高可读性。 – 2010-11-07 09:01:43

回答

2

我可以想出最好的答案是您已经完全选择了表示数据的错误方式。

一个更合理的方式来表示用户ID是一个简单的列(我猜)是保存用户详细信息的表格,并带有索引以便快速查找。然后“遍历”退化为一个简单的选择并迭代结果集。

如果您想继续使用当前的(IMO愚蠢)表结构,那么SQL不会帮助您遍历树。如果你试图遍历数据库中的树,你最终会为树中的每个节点做一个选择,这将非常缓慢。

最好的选择是选择表格的所有行,在内存中构建一棵树并遍历该树。

+0

对不起,遵循一个愚蠢的方法,现在我明白了,在完成这个项目之前,我想先通过“树横向概念”。我在网上搜索了很多关于这方面的文章,你能否给我推荐一些关于算法计算的好书。 – 2010-11-09 10:51:50

+0

@Harie James - 针对不同的编程语言,有许多关于“数据结构和算法”的书籍。尝试在amazon.com上搜索,然后使用“查看内部”功能浏览内容和示例章节。 – 2010-11-09 22:13:11