我想找到一些方法來通過非遞歸方法找到根是否是關節點。通過遞歸方法,我們可以遞歸地查找根的未連接子節點的數量。但我沒有找到一種方法來做到這一點沒有遞歸。通過非遞歸DFS的關節點
3
A
回答
1
我能寫一個我認爲可能會起作用的算法。這裏是:
我們有任何頂點的四個狀態。未經審查,訪問,訪問,重新審視。我們保留一個父數組和一個數組,用於保存未連接的子數。
我們繼續從根開始添加頂點,但是我們不彈出父元素。例如,我們將root 1連接到2,3,6,7,然後我們將1 push到堆棧但不彈出它。相反,我們推動其他孩子。而且我們也爲每個元素維護爸爸。例如,2,3,6,7有1個作爲他們的父親。
如果它們是UNVISITED,我們將棧上的節點標記爲VISITING。
如果在任何節點鄰接列表的遍歷期間,我們發現某個元素處於VISITING狀態,我們將其狀態設爲REVISITING,但只有當這個元素不是它的父親時。例如,最重要的是2,3,6,7處於VISITING狀態。現在,如果7的鄰接表爲1,3,5,10,8,12則因爲1是其父親,所以我們不改變1的狀態,我們去3,看它作爲訪問狀態,也它不是7的父親,我們做其狀態爲REVISITING。現在堆棧從下到上依次爲1,2,3,6,7,5,10,8,12。
現在,如果我們遇到任何元素的鄰接表中沒有UNVISITED元素,if這個元素的狀態是VISITING狀態(不是REVISITING),我們加1到其父親的子女總數(初始化爲0)。如果它處於REVISITING狀態,我們忽略爲其父母的孩子號碼加1。此外,我們將這個元素從堆棧中彈出並使其狀態爲VISITED。
漸漸彈出元素我們到達根的孩子(連接或唯一的)。我們通過步驟4檢查以計算根的唯一未連接子項的數量。如果它大於1,那麼root是一個關節點。
該算法看起來有點複雜,但似乎工作。任何建議或問題都歡迎。
相關問題
- 1. DFS - Java的遞歸 - 節點
- 2. 非遞歸DFS實現
- 3. 通過遞歸來反轉節點
- 4. 關於遞歸DFS的2個問題
- 5. DFS遞歸困境
- 6. 遞歸節點
- 7. 返回節點文本(非遞歸)
- 8. BGL DFS節點
- 9. 遞歸DFS Ruby的方法
- 10. DFS計算關節點的隔離節點
- 11. 通過樹狀視圖中的節點遞歸地迭代?
- 12. 通過遞歸返回樹中所有節點的總和
- 13. 如何通過db2中的遞歸查詢獲取葉節點?
- 14. 通過遞歸
- 15. 通過遞歸
- 16. XSL如何通過ID匹配值遞歸地遍歷節點
- 17. Drupal節點通過分類層次遞歸顯示
- 18. 的Javascript,奇怪的遞歸行爲,DFS
- 19. 遞歸節點用C
- 20. NetworkX遞歸子節點
- 21. 遞歸插入節點
- 22. PostgreSQL聚合節點遞歸
- 23. 遞歸空節點清理
- 24. 通過相關實體正確遞歸
- 25. 非遞歸dfs(何時標記它訪問?)
- 26. 遞歸查找圖矩陣DFS中的所有路徑DFS
- 27. 非遞歸地計算樹中的節點。
- 28. 以非遞歸方式刪除BST中的節點
- 29. 非遞歸(單節點級別)Python中的getElementsByTagName xml.dom
- 30. 遞歸搜索非二叉樹中的節點
這個網站是爲程序問題,這聽起來更多的是理論問題 –
的我只是想要得到上述問題的算法。 –