最近在乙個專案中接觸到乙個演算法,類似於構建生成樹演算法,但是還是有點不同,首先講一下該演算法的構建所需要實現的功能,如下圖所示:
再專案開發過程中,我是先考慮實現功能,在功能實現的基礎上再考慮演算法功能優化為題,該演算法採用的是演算法思想中的回溯法,首先看下該演算法設計的步驟
1.構建樹之前先建立乙個實體類treemodel,其中該類中包含三個引數,如下**所示:
public class treemodel
public void setno(long no)
public string getscheduleid()
public void setscheduleid(string scheduleid)
public long getfatherno()
public void setfatherno(long fatherno)
public treemodel(long no, string scheduleid, long fatherno)
public treemodel()
}
2.第乙個引數是乙個節點的標識,第二個是該節點的值,第三個引數對應的是父節點的標識,對於第乙個節點a,父節點我標識為0,構建生成樹的具體**如下所示:
public class treemodelutil else
}if(flag==2)else }}
} return s;
} public long isendnode(listlist,long id)
if (listfno.contains(id)) else
return flag;
}
該類中包含兩個方法,第乙個方法是構建生成樹,第二個方法是判斷是不是葉子節點。
3.先寫乙個測試類,如下:
public class treemodelmain else }
/*** @param args
*/public static void main(string args)
}
上例的輸出結果是:a=d+e+c
這是在b不可測的情況下得到的值。
若是修改d為空,哪兒就會輸出不可測,得不到值的情況
本演算法主要採用的是乙個遞迴思想,通俗的話來說出了葉子節點之外,別的孩子節點始終會變成父親,然後就這樣遞迴下去,最後得到值,本演算法中可能還存在很多的缺陷,能忘能夠得到高手的指正。
樹的某節點的所有父節點
定位乙個節點遞迴實現為 node findnode const node root,int val 輸出到當前節點的所有路徑,也就是當前節點的所有父親節點集合 這個很有用的,呵呵,知道的人自然知道 這個實現其實是根據中序遍歷得到的,採用中序遍歷的方式查詢節點,當查詢到當前節點的時候堆疊中儲存的就是當...
構建最小生成樹的prim演算法
prim演算法通過不斷地增加生成樹的頂點來得到最小生成樹。在演算法的任一時刻,一部分頂點已經新增到生成樹的頂點集合中,而其餘的頂點尚未加到生成樹中。此時,prim演算法通過選擇邊 u,v 使得 u,v 的權值是所有u在生成樹中但v不在生成樹中的邊的權值的最小者,從而找到新的頂點v並把它新增到生成樹中...
讀取當前選中節點的父類級別節點值
在網上找了本天也沒有找到如何取到aspx頁面中的treeview控制項選中節點的父類節點值,這裡說的是選中的節點的之上的父類以及父類的父類以此後推就對了。開始的時候確實是找不到思路,後來想到了用for迴圈,自己看 估計沒啥問題的。注釋寫的很詳細了。protected void treeview1 s...