二叉樹路徑搜尋問題

2021-09-14 03:21:39 字數 791 閱讀 5779

1、求任意二叉樹中的所有路徑

細想一下,這其實是乙個dfs問題。有乙個helper函式,用來向list中新增string。這裡為什麼要用靜態的string而不是動態的stringbuilder?另乙個問題是,要動態地新增內容給list,從思路上講應該是回溯法。回溯用動態子結構比如list的話,就需要在每一次list.add時,做一次remove。典型的求全排列的問題,用string試試看。

第二個子問題是,為什麼同樣是動態結構,這道題用stringbuilder就不行?是可以的。但在lists.add後不要return。而回溯用的remove在遞迴呼叫left和right之後。這裡有無return有何關係?有return 就鐵定沒有後面的remove了。也就是lists加入new arraylist(tmp)後,直接返回,而不是remove後返回。

另外乙個不同點是,對於全排列中的陣列,進行的是線性遍歷,而對於二叉樹乃至圖來說,就有dfs和bfs之分,這裡是dfs,也就是用遞迴。

實際上,全排列問題的求解,在邏輯上的結構也是樹狀的,為什麼也是樹狀的呢?大概只要需要進行分類討論的問題,不管有沒有用自動機,程式的結構都是樹狀的吧。但程式的研究物件可以不是。

再想了一遍,全排列問題中的陣列沒有二叉樹這樣的整齊結構,所以要用到for迴圈進行遍歷。遍歷+遞迴一次只能有乙個結果。要得到其餘結果,則要進行remove才可以。

2、求二叉樹中指定和的路徑

思路同上,加乙個sum變數和乙個判斷sum是否滿足要求的語句即可。

如果將string換成list

3、另一種二叉樹的路徑,從乙個葉節點到另乙個葉節點,求最大值。

略。

二叉樹 還原二叉樹 二叉搜尋樹

先序遍歷的特點 先遍歷根結點,再遍歷左子樹,最後再遍歷右子樹 中序遍歷的特點 先遍歷左子樹,再遍歷根結點,最後再遍歷右子樹 後序遍歷的特點 先遍歷左子樹,再遍歷右子樹,最後再遍歷根結點 舉例 先序遍歷 a b d f g h i e c 中序遍歷 f d h g i b e a c 如上,根據先序遍...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...

排序二叉樹or搜尋二叉樹or查詢二叉樹

排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...