博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣题解-654. 最大二叉树(分治法思想,递归的方式求解)
阅读量:4300 次
发布时间:2019-05-27

本文共 1611 字,大约阅读时间需要 5 分钟。

题目:654. 最大二叉树

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

二叉树的根是数组中的最大元素。

左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。

示例 :

输入:[3,2,1,6,0,5]

输出:返回下面这棵树的根节点:

6    /   \   3     5    \    /      2  0          \        1

提示:

给定的数组的大小在 [1, 1000] 之间。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/maximum-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

  1. divide

    找出原始数组的最大值及其所在位置pos,将原始数组按照pos位置分为左边部分和右边部分。

  2. conquer

    将pos位置的数组元素作为根节点root,然后递归地处理左边部分和右边部分,分别作为左子树left和右子树right。

  3. combine

    将二叉树拼接起来,即root->left = left,root->right = right。
    return root

代码

/** * 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
& nums) {
return dfs(nums, 0, nums.size()-1); } TreeNode* dfs(vector
& nums, int start, int end) {
if (start > end) {
return NULL; } int pos = maxPos(nums, start, end); TreeNode* node = new TreeNode(nums[pos]); TreeNode* left = dfs(nums, start, pos-1); TreeNode* right = dfs(nums, pos+1, end); node->left = left; node->right = right; return node; } int maxPos(vector
& nums, int start, int end) {
int max = nums[start]; int pos = start; for (int i = start; i <= end; i++) {
if (max < nums[i]) {
max = nums[i]; pos = i; } } return pos; }};
你可能感兴趣的文章
Could not find a storyboard named 'Main' in bundle NSBundle
查看>>
CocoaPods安装和使用教程
查看>>
Beginning Auto Layout Tutorial
查看>>
block使用小结、在arc中使用block、如何防止循环引用
查看>>
iPhone开发学习笔记002——Xib设计UITableViewCell然后动态加载
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Swift code into Object-C 出现 ***-swift have not found this file 的问题
查看>>
为什么你的App介绍写得像一坨翔?
查看>>
RTImageAssets插件--@3x可自动生成@2x图片
查看>>
iOS开发的一些奇巧淫技
查看>>
常浏览的博客和网站
查看>>
Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
查看>>
点击button实现Storyboard中TabBar Controller的tab切换
查看>>
Xcode 的正确打开方式——Debugging
查看>>
打包app出现的一个问题
查看>>
iOS在Xcode6中怎么创建OC category文件
查看>>
Expanding User-Defined Runtime Attributes in Xcode with Objective-C
查看>>
iOS7 UITabBar自定义选中图片显示为默认蓝色的Bug
查看>>
提升UITableView性能-复杂页面的优化
查看>>
25 iOS App Performance Tips & Tricks
查看>>