LeetCode 654 最大二叉樹

2021-10-19 18:44:22 字數 1367 閱讀 2169

題目描述:

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

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

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

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

返回有給定陣列 nums 構建的 最大二叉樹 。

示例:

輸入: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,2,1] 中的最大值是 3 ,左邊部分是 ,右邊部分是 [2,1] 。

- 空陣列,無子節點。

- [2,1] 中的最大值是 2 ,左邊部分是 ,右邊部分是 [1] 。

- 空陣列,無子節點。

- 只有乙個元素,所以子節點是乙個值為 1 的節點。

- [0,5] 中的最大值是 5 ,左邊部分是 [0] ,右邊部分是 。

- 只有乙個元素,所以子節點是乙個值為 0 的節點。

- 空陣列,無子節點。

思路分析:

本方法非常簡單。建立方法 construct(nums, l, r),用於找出在陣列 nums 中從 l到 r 索引(不包含第 r 個位置)中最大二叉樹的根節點。

演算法步驟如下:

首先呼叫 construct(nums, 0, n),其中 n 是陣列 nums 的長度。

在索引範圍 (l:r-1)內找到最大值的索引,將 nums[max_i] 作為根節點。

呼叫 construct(nums, l, max_i) 建立根節點的左孩子。遞迴執行此操作,建立根節點的整個左子樹。

類似的,呼叫 construct(nums, max_i + 1, r) 建立根節點的右子樹。

方法 construct(nums, 0, n) 返回最大二叉樹的根節點。

**實現:

public class solution 

public treenode construct(int nums, int l, int r)

public int max(int nums, int l, int r)

return max_i;}}

leetcode 654 最大二叉樹

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

leetcode 654最大二叉樹

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

leetcode654 最大二叉樹

一.參考題解.遍歷一次陣列並隨時將新的節點插入樹的相應位置,如果當前遍歷的值大於樹的根節點,則將當前節點作為新的根節點,將原來的樹當作新根節點的左子樹,否則的話,將其遞迴的交給根節點的右子樹處理 因為從左向右遍歷,新的節點一定在右邊 二.參考第二個大神的遞迴.第二種遞迴.class solution...