leetcode:654最大二叉樹(C++)
阿新 • • 發佈:2018-12-21
給定一個不含重複元素的整數陣列。一個以此陣列構建的最大二叉樹定義如下:
1.二叉樹的根是陣列中的最大元素。 2.左子樹是通過陣列中最大值左邊部分構造出的最大二叉樹。 3.右子樹是通過陣列中最大值右邊部分構造出的最大二叉樹。 4.通過給定的陣列構建最大二叉樹,並且輸出這個樹的根節點。 例如: 思路: 我們先找到數組裡面的最大數,把他設定為根節點,然後遞迴傳入最大數的左邊的陣列,然後繼續找最大的數,然後繼續遞迴傳入,直到他的左等於右返回NULL,然後遞迴查詢最大數右邊的節點,遞迴完畢返回
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* constructMaximumBinaryTree(vector<int>& nums) { return maxtree(nums,0,nums.size()-1); } TreeNode *maxtree(const vector<int>nums,int left,int right) { if(left>right) return NULL; int max=nums[left];//每次從num傳入的left開始 int index=left;//index標記最大數的位置 for(int i=left;i<=right;i++) { if(nums[i]>max) { max=nums[i];//max為最大數 index=i;//max的下標 } } TreeNode *root=new TreeNode(max); root->left=maxtree(nums,left,index-1);//遞迴返回max的左邊陣列 root->right=maxtree(nums,index+1,right);//遞迴返回max右邊的陣列 return root; } };