許多樹形和圖形問題都可以使用深度優先搜尋 (DFS) 或廣度優先搜尋 (BFS) 遍歷來解決。 如果我們需要搜尋更接近根節點或源節點的東西,我們可以使用 bfs。 另一方面,如果我們需要更深入的搜尋,我們可以使用 DFS。
在某些情況下,無論節點的順序如何,我們都可以使用 BFS 或 DFS。 然而,在其他情況下,遍歷方法的選擇可能會在效率方面產生重大影響。 在決定使用哪種遍歷方法時,請務必考慮特定的用例。
在二叉樹問題中,有四種不同型別的遍歷:
前言遍歷:此遍歷首先訪問根節點,然後訪問左側子樹,最後訪問右側子樹。 當我們需要在檢視任何葉子之前探索所有樹節點時,它非常有用。
中階遍歷:這種型別的遍歷首先訪問左側子樹,然後訪問根節點,然後訪問右側子樹。 當我們使用二叉搜尋樹 (bst) 並且想要按公升序生成節點資料時,它很有用。
訂單後遍歷:這種型別的遍歷首先訪問左側子樹,然後訪問右側子樹,最後訪問根節點。 當我們需要在檢視任何內部節點之前瀏覽所有葉節點時,它非常有用。
廣度優先搜尋 (BFS) 遍歷:這種型別的遍歷使用佇列逐層瀏覽節點。 當我們需要查詢有關樹的特定級別的特定資訊時,它可能很有用。
為了解決樹和問題,有時我們使用以下遍歷策略:
當我們需要在遞迴呼叫之間儲存一些資訊時,我們使用附加變數或指標作為函式引數。 當我們想要將資訊傳遞回遞迴呼叫堆疊時,這很有用。
當我們想將乙個複雜的問題分解成更小、更易於管理的部分時輔助函式非常有用。 這些幫助程式函式可以執行解決整個問題所需的特定任務。
當我們需要跟蹤樹中的節點與其父節點之間的關係時父指標可能很有用。 當我們需要遍歷樹以查詢一些資訊時,這會很有幫助。
當我們想在遍歷樹或圖形時跟蹤某些資訊在節點內儲存其他資料可能很有用。 例如,我們可能希望儲存搜尋期間是否訪問了節點,或者我們可能希望儲存從特定節點到根節點的最小距離。
當我們需要按特定順序儲存和訪問資料時,堆疊、佇列和優先順序佇列等資料結構非常有用。 例如,我們可以使用堆疊來儲存深度優先搜尋期間訪問過的節點,或者使用佇列來儲存廣度優先搜尋期間需要訪問的節點。
求二叉樹的最小深度。
合併兩個二叉樹。
求二叉樹的高度。
驗證二叉搜尋樹。
將排序後的陣列轉換為平衡的 bst
求 BST 的絕對最小差異。
BST 中的第 k 個最大元素。
課程問題,二分法。
找到二叉樹的左檢視。
優質作者名單