二叉樹每層的最大數值

2021-09-28 18:38:17 字數 1480 閱讀 6289

具體思路:二叉樹的層序遍歷的非遞迴寫法使用的是佇列來實現,本題只要在上面做適當的增加就可以了

首先將二叉樹的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 ...