2010-11-07 85 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