leetcode刷題 最大二叉樹

2021-10-22 20:44:37 字數 2155 閱讀 1930

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

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

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

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

示例 1:

輸入:nums = [3,2,1,6,0,5]

輸出:[6,3,5,null,2,0,null,null,1]

示例2:

輸入:nums = [3,2,1]

輸出:[3,null,2,null,1]

首先理解題目的意思,我們需要用陣列中的元素來構建二叉樹。既然題目都說到了遞迴構建二叉樹,那麼我們可以用遞迴的方法來構建。

我們可以定義這樣乙個遞迴函式來構建二叉樹:

首先我們需要遍歷當前陣列,找出當前陣列中最大值的位置和大小,將當前陣列最大值賦給二叉樹的根節點。之後將最大值左邊的陣列存入乙個新的陣列,我們暫將這個新的陣列稱為left陣列。將最大值右邊的陣列存入乙個新的陣列,我們暫將這個新的陣列稱為right陣列。在生成left陣列和right陣列之後,我們還需要定義兩個新的二叉樹子節點,用來遞迴生成最大二叉樹。有了left和right陣列後,遞迴呼叫當前這個函式來生成最大二叉樹,在當前呼叫函式開頭加上返回條件:若當前陣列的長度為0則返回當前樹的節點為nullptr。呼叫函式的引數有兩個,乙個是指向樹節點位址的指標,乙個是存放陣列元素的容器變數。

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

vector<

int> left;

vector <

int> right;

int max=nums[0]

;//當前陣列最大值

int index=0;

//當前陣列最大值索引

for(

int i=

0;isize()

;i++)}

root-

>val=max;

for(

int i=

0;ifor(

int i=index+

1;isize()

;i++)}

order

(left,root-

>left)

;order

(right,root-

>right)

;return;}

treenode*

constructmaximumbinarytree

(vector<

int>

& nums)

vector <

int> left;

vector <

int> right;

int max=nums[0]

;//當前陣列最大值

int index=0;

//當前陣列最大值索引

for(

int i=

0;isize()

;i++)}

treenode* root=

newtreenode

(max)

;for

(int i=

0;ifor(

int i=index+

1;isize()

;i++)}

order

(left,root-

>left)

;order

(right,root-

>right)

;return root;}}

;

其實本題的解題思路還是比較簡單的,關鍵在於看怎麼實現**能夠減少時間複雜度和空間複雜度。對於作者這部分的**,作者認為在時間複雜度上和空間複雜度上還可以進行提公升,由於本人能力和時間有限並沒有做優化,只是提供了一種方法。

每日刷題 最大二叉樹

給定乙個不含重複元素的整數陣列。乙個以此陣列構建的最大二叉樹定義如下 二叉樹的根是陣列中的最大元素。左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。示例 輸入 3,2,1,6,0,5 輸出 ...

LeetCode 最大二叉樹

q 給定乙個不含重複元素的整數陣列。乙個以此陣列構建的最大二叉樹定義如下 二叉樹的根是陣列中的最大元素。左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。示例 輸入 3,2,1,6,0,5 輸...

最大二叉樹

題目大意 總是按照當前陣列或者子陣列中的元素值的最大值作為根節點,依次建立一顆二叉樹。輸入 nums 3 2,1 6,0 5 輸出 6,3,5,null,2,0,null,null,1 解釋 遞迴呼叫如下所示 3,2,1,6,0,5 中的最大值是 6 左邊部分是 3,2,1 右邊部分是 0,5 3,...