具體思路:二叉樹的層序遍歷的非遞迴寫法使用的是佇列來實現,本題只要在上面做適當的增加就可以了
首先將二叉樹的root進入佇列,然後取隊首進入乙個臨時的vector中;
分別看該root結點有沒有左右孩子,如果有的話就將其入隊;
隊首出隊,這個時候的遍歷的大小是佇列的size的大小,此時size初始值為1;
這個內迴圈結束後,此時本層的結點都在臨時的vector中;
將這個vector中的最大元素求出,push進入最終會被返回的佇列中;
繼續執行上述的過程,就會將每層的最大值全部放入最終要返回的佇列中;
最大的外層迴圈的判斷條件是佇列是否為空,因為只有在沒有元素進入的時候,也就是已經達到最後一層的時候才會佇列變成空佇列;
具體的**實現如下:
#include
#include
#include
using
namespace std;
struct treenode };
vector<
int>
largestvalues
(treenode* root)
vector<
int> vtmp;
//用來存放每一層的結點
queue> qu;
//每層入隊
treenode * cur;
int len =1;
int max1;
qu.push
(root)
;while
(!qu.
empty()
)if(cur-
>right)
qu.pop();
}/*for (auto &i : vtmp)
cout << endl;*/
max1 = vtmp.
back()
;int n = vtmp.
size()
;for
(int i =
0; i < n; i++)}
cout << max1 << endl;
res.
push_back
(max1)
; vtmp.
clear()
; len = qu.
size()
;}return res;
}//int max(int a, int b)
//int
main()
最後分享幾點在程式設計過程中遇到的小問題:每次的pop都會改變size的大小,應該將size單獨的用臨時變數存放;在選取最大值的時候,如果不使用外部的函式來實現的話,就要將back先當成最大值,並且這句**應該放在for迴圈之外,如果放到裡面的話就會發現,每次的max都會變成pop後的那個back,從而比較失去了作用,同時你得到的當然也就不是最大值了 Leetcode刷題記錄 構建最大數二叉樹
給定乙個不含重複數字的陣列,最大二叉樹構建規則如下 1 根是陣列中最大的數字 2 左邊的子樹是最大數字左邊的內容 3 右邊的子樹是最大數字右邊的內容 class solution object def constructmaximumbinarytree self,nums type nums li...
Leetcode刷題記錄 構建最大數二叉樹
給定乙個不含重複數字的陣列,最大二叉樹構建規則如下 1 根是陣列中最大的數字 2 左邊的子樹是最大數字左邊的內容 3 右邊的子樹是最大數字右邊的內容 class solution object def constructmaximumbinarytree self,nums type nums li...
二叉樹的深度 二叉樹的深度 二叉樹最大寬度
題目 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。例如 給定二叉樹 3,9,20,null,null,15,7 返回它的最大深度 3 根節點加上左右子樹的最大深度就是樹的最大深度。如下 class solution ...