菜鳥刷題之路 Q28 最大樹

2021-10-25 22:22:28 字數 812 閱讀 5355

給定乙個不含重複元素的整數陣列。乙個以此陣列構建的最大二叉樹定義如下:

二叉樹的根是陣列中的最大元素。

左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。

右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。

通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。

分析:根據題目的定義,乙個最大二叉樹的子樹也是最大二叉樹,所以最大二叉樹是按照遞迴的方式來生成的,這也是樹最常見的定義方式。

我們首先看第一次遞迴的過程,不難發現,我們只要得到6的下標(最大值),將其作為根節點,其左右孩子是其左邊區間和右邊區間中最大的值,遞迴地得到這兩個節點後再重複這個過程就可以得到整個樹。

注意一下邊界條件,我們傳遞的應該是陣列、左邊界和右邊界(因為我們需要對陣列進行劃分):

class

solution

public treenode func

(int

nums,

int l,

int r)

public

intgetgreatestnum

(int

nums,

int l,

int r)

}

結果:

菜鳥刷題之路 Q1

寫乙個函式,求兩個整數之和,要求在函式體內不得使用 四則運算符號。一開始考慮轉化成位來計算,但是這樣 結構非常複雜且當出現負數時就難以計算。之後轉化思維,從十進位制數字計算的本身上來看 兩個數 ab cd 的計算過程可以看成是 a c e,b d f,如果e,f大於10,就保留ef 的個位數。如果出...

菜鳥刷題之路 Q13

問題來自牛客劍指offer 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。問題和尋找發帖水王屬於同一問題。即尋找眾數。問題可以看成是對陣列中的數進行計數。利用hashmap來作...

菜鳥刷題之路 Q16

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。問題用hashmap解決是很容易想到的。使用異或運算的特點也可以解決該問題。將陣列的值作為key存入hashmap 1 當該值存在於hashmap中,刪除它 2 當該值不存在加入它 最後整個hashmap中剩...