普通的樹形選單生成是採用遞迴法,比較浪費時間和空間。在查詢出的樹形選單資料是有序排列的情況下,我採用倒序的遍歷,拼湊出最終的樹,只使用了1次for迴圈,以空間換時間,效果還不錯,具體的原理稍後補充。
資料庫中資料如下:
可以看到,在mid有序排列的情況下,如果倒序從mid為38的記錄中獲得pid35,然後獲得到mid為35的記錄,在其chirldren屬性中追加該mid為38的記錄,同時繼續往上遍歷mid為37的記錄,依次壓縮樹形選單,最終剩下的就是樹形選單的根節點,根節點中包含樹形選單,這樣就倒序遍歷一遍,即可獲得樹形選單。
實現**:
public
class
mian
for (int i = keylist.size() - 1; i >= 0; i--) else
otichirldrenlist.add(oti);
otifather.setchildren(otichirldrenlist);
hashmap.put(keylist.get(i), otifather);
hashmap.remove(keylist.get(i));}}
listtree = new arraylist();
for (entryo : hashmap.entryset())
system.out.println(json.tojsonstring(tree));
ret.close();// 關閉結果集
db.close();// 關閉連線}}
執行結果:
多叉樹非遞迴遍歷
所用 為c define nothing done std vectorfinderstack 遍歷用棧 finderstack.clear 清空棧 spointstr point this m point finderstack.push back point 初始入棧 while null po...
二叉樹遞迴 非遞迴遍歷(Java實現)
遍歷是對一顆二叉樹最基本的操作,有前序遍歷 中序遍歷 後序遍歷和層次遍歷四種,都可以通過遞迴或者資料結構實現。假定葉子結構如下 static classleaf publicstring tostring 1.前序遍歷 先訪問其根節點,再訪問其左節點,最後訪問其右節點。遞迴實現 先訪問其根節點,然後...
二叉搜尋樹非遞迴實現 java版
二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。其實說白點就是一顆...