最大層內元素和

2021-10-04 02:02:47 字數 2043 閱讀 8262

這裡我們可以採用很多解法,比如單佇列、雙佇列、但更多的,我覺得採用遞迴思想,才是比較考驗思維功底的。

/**

* definition for a binary tree node.

* type treenode struct

*/func

maxlevelsum

(root *treenode)

int queue :=

*treenode

maxsum :=

0 level :=

0 res := level

forlen(queue)

>

0if v.right !=

nil}

// 保留當前節點和最大值的層

if maxsum < sum

// 指向子佇列

queue = newqueue

}return res

}

像這種,我覺得還是遞迴思想更加能得到鍛鍊,我現分享如下的兩種遞迴解法,僅供參考,具體請見注釋部分。

/**

蠻力演算法思路就是超級簡單,當然效率一般,因為很多步驟重複了:

1、計算樹有多少層。

2、計算每一層的和

3、從樹的根到葉,一層層求最大值

4、輸出最大值

*/func

mymax

(x, y int

)int

return y

}func

maxlevelsum

(root *treenode)

int sum :=

0 maxdepth :=

getmaxdepth

(root)

res :=

0for i:=

0; i

}return res+1}

// 計算深度

func

getmaxdepth

(root *treenode)

intreturn

mymax

(getmaxdepth

(root.left)+1

,getmaxdepth

(root.right)+1

)}// 計算單層的元素累積和

func

getlevelsum

(root *treenode, level int

)int

if level==

0return

getlevelsum

(root.left, level-1)

+getlevelsum

(root.right, level-1)

}

解法二:這種思路也很清晰,而且寫出的**優美不冗餘。

// 主要思想

// 為每一層維護乙個和值 rowsum,然後比較各層和最大值,將其輸出

// 具體看**注釋

func

maxlevelsum

(root *treenode)

int}

return maxlevel +1}

func

dfs(root *treenode, rowsum *

int, depth int

)// 只要是要入棧的元素大於它所在的深度,說明此時該層已經有元素了,

// 此時,來乙個,累加乙個,放在depth索引所在的位置。

// 我們只需要將其所在層的這些值挨個進行累加即可。

iflen

(*rowsum)

> depth

else

// 最後,分別對左右子樹進行遞迴吧

dfs(root.left, rowsum, depth+1)

dfs(root.right, rowsum, depth+1)

}

leetcode1161 最大層內元素和

給你乙個二叉樹的根節點 root。設根節點位於二叉樹的第 1 層,而根節點的子節點位於第 2 層,依此類推。請你找出層內元素之和 最大 的那幾層 可能只有一層 的層號,並返回其中 最小 的那個。示例 輸入 1,7,0,7,8,null,null 輸出 2 解釋 第 1 層各元素之和為 1,第 2 層...

遞迴演算法c 1161 最大層內元素和

題目 給你乙個二叉樹的根節點 root。設根節點位於二叉樹的第 1 層,而根節點的子節點位於第 2 層,依此類推。請你找出層內元素之和 最大 的那幾層 可能只有一層 的層號,並返回其中 最小 的那個。1 70 7 8輸入 1,7,0,7,8,null,null 輸出 2 解釋 第 1 層各元素之和為...

陣列內兩個元素的最大差

2016京東商場校園招聘筆試題 問題描述 無序陣列array,找到陣列中兩個數的最大差值,且大數出現在小數之後,如 arr i arr j 且 i比如 array 是 2,3,10,6,4,8,1 最大差值是8 2 10 方法1 依次訪問陣列中的每乙個元素 1 記錄當前訪問過的陣列中的最小值 min...