[leetCode]654. 最大二叉樹
阿新 • • 發佈:2020-11-03
題目
給定一個不含重複元素的整數陣列。一個以此陣列構建的最大二叉樹定義如下:
二叉樹的根是陣列中的最大元素。
左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。
右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。
通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。
示例 : 輸入:[3,2,1,6,0,5] 輸出:返回下面這棵樹的根節點: 6 / \ 3 5 \ / 2 0 \ 1
遞迴
class Solution { public TreeNode constructMaximumBinaryTree(int[] nums) { if (nums.length == 0) return null; return traversal(nums, 0, nums.length - 1); } // 左閉右閉區間 private TreeNode traversal(int[] nums, int begin, int end) { // 說明切割完畢返回空 if (begin > end) return null; // 尋找切割點下標 int rootIndex = getMax(nums, begin, end); TreeNode root = new TreeNode(nums[rootIndex]); if (begin == end) return root; // 切割左子樹 int leftBegin = begin; int leftEnd = rootIndex - 1; // 切割右子樹 int rightBegin = rootIndex + 1; int rightEnd= end; // 遞迴 root.left = traversal(nums, leftBegin, leftEnd); root.right = traversal(nums, rightBegin, rightEnd); return root; } // 獲取陣列中指定範圍內最大值的下標 private int getMax(int[] nums, int begin, int end) { int max = begin; for (int i = begin + 1; i <= end; i++) { if (nums[i] > nums[max]) max = i; } return max; } }