1. 程式人生 > >[Leetcode Week14]Maximum Binary Tree

[Leetcode Week14]Maximum Binary Tree

思想 tco logs dup note fine cnblogs duplicate start

Maximum Binary Tree 題解

原創文章,拒絕轉載

題目來源:https://leetcode.com/problems/maximum-binary-tree/description/


Description

Given an integer array with no duplicates. A maximum tree building on this array is defined as follow:

  1. The root is the maximum number in the array.
  2. The left subtree is the maximum tree constructed from left part subarray divided by the maximum number.
  3. The right subtree is the maximum tree constructed from right part subarray divided by the maximum number.

Construct the maximum tree by the given array and output the root node of this tree.

Example

Input: [3,2,1,6,0,5]
Output: return the tree root node representing the following tree:

      6
    /      3     5
    \    / 
     2  0   
               1

Note: The size of the given array will be in the range [1,1000].

Solution

class Solution {
public:
    TreeNode* getSubTree(vector<int>& nums, int start, int end) {
        TreeNode* resultNode;
        if (start == end) {
            resultNode = new TreeNode(nums[start]);
            return
resultNode; } int maxIdx = start; int i; for (i = start; i <= end; i++) { if (nums[i] > nums[maxIdx]) maxIdx = i; } resultNode = new TreeNode(nums[maxIdx]); if (maxIdx > start) { resultNode -> left = getSubTree(nums, start, maxIdx - 1); } if (maxIdx < end) { resultNode -> right = getSubTree(nums, maxIdx + 1, end); } return resultNode; } TreeNode* constructMaximumBinaryTree(vector<int>& nums) { if (nums.empty()) return NULL; return getSubTree(nums, 0, nums.size() - 1); } };

解題描述

這道題的題意是,對給定的一個數組,構造一棵所謂的“最大二叉樹”。很容易想到的就是使用遞歸的思想,每次都對數組的一段進行處理,找出數組段中最大的元素,將該元素所謂當前樹的樹根,對元素左右兩邊兩個數組段分別構造“最大二叉樹”,分別作為樹根的左子樹和右子樹。

[Leetcode Week14]Maximum Binary Tree