寬度搜尋 leetcode 515

2021-09-19 20:03:17 字數 739 閱讀 4159

您需要在二叉樹的每一行中找到最大的值。

示例:

輸入: 

1/ \

3 2

/ \ \

5 3 9

輸出: [1, 3, 9]

思路:層序遍歷的基礎上,用乙個容器儲存每層中的元素值。對每層元素值進行排序以獲取最大值。時間複雜度o(nlogn)(快排是o(logn),快排巢狀在層序遍歷中了,因此是o(nolgn))

vectorlargestvalues(treenode* root) 

//將每層節點值排序

sort(container.begin(),container.end());

answer.push_back(container.back());

container.clear();

} return answer;

}

優化:既然我們存的是每一層最大的值,為什麼不直接用乙個變數存呢?先存每層第乙個節點的值,之後與本層中的其餘節點進行比較,將每層的最大值存入陣列中返回。這樣就省去了把每層的每個值都存起來的空間,也省去的排序浪費的時間。做了這個改變,時間複雜度降為o(n)。

vectorlargestvalues(treenode* root) 

answer.push_back(larger);

} return answer;

}

寬度優先搜尋

include using namespace std const int n 700 const int inf 0x3f3f3f3f int dir 10 int n,a,b,ans 1000000 flag 0 int floor n struct node int check node tm...

寬度優先搜尋

寬度優先搜尋演算法 又稱廣度優先搜尋 是最簡便的圖的搜尋演算法之一,這一演算法也是很多重要的圖的演算法的原型。dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。其別名又叫bfs,屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說...

雙向寬度搜尋

從正反兩個方向進行寬度優先搜搜,可以大大減少搜尋量,提高搜尋速度。從初始狀態和目標狀態兩個方向同時進行擴充套件,如果兩顆解答樹在某個節點第一次發生重合,即可終止此搜尋過程,則該節點所連線的兩條路徑所拼成的路徑就是最優解。通常有兩種搜尋方式 1.兩個方向交替擴充套件 2.選擇節點個數較少的那個方向先擴...