Leetcode刷题--654. 最大二叉树

该博客讨论了如何利用Python高效地构建一个由给定数组构建的最大二叉树。关键在于理解递归过程,找到最大值作为根节点,并递归处理左右子树。题目来源于LeetCode,解题思路包括前序遍历框架和递归调用,最终实现了一个简单的解决方案。
摘要由CSDN通过智能技术生成

题解参考链接:https://labuladong.gitbook.io/algo/shu-ju-jie-gou-xi-lie/shou-ba-shou-shua-er-cha-shu-xun-lian-di-gui-si-wei/er-cha-shu-xi-lie-2

这边用Python的话,可以取巧很多。

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

二叉树的根是数组 nums 中的最大元素。
左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。
右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。
返回有给定数组 nums 构建的 最大二叉树 。

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

在这里插入图片描述

输入: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 的节点。
        - 空数组,无子节点。

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

根据题解,解决树的关键思路主要是:
把题目的要求细化,(重点)搞清楚根节点应该做什么,然后剩下的事情抛给前/中/后序的遍历框架就行了千万千万不要跳进递归细节中
初始想法:

  1. 编写伪代码
  2. 选择前序遍历框架,因为是构建树嘛,根都没有哪里有子节点呢?顺理成章,所以选择前序遍历。
  3. 细化要求

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
    if 判断递归退出条件:
    	return
    root = TreeNode(max(nums))
    # 前序遍历框架
    root.left
    root.right
    return root

怎么说呢,Python太方便了,方便得让我害怕代码水平会退步,因为一些细节方面完全可以跳过,比如找最大值(虽然是基础)等等。

class Solution:
    def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
    # 在Python中切片,如果分号左右相同则为空,如果左边大于右边则为空
    # 比如为空情况temp[0:0] = [], temp[5:6] = [],所以设置该跳出条件
    if len(nums) == 0:
    	return
    nums_max = max(nums)
    root = TreeNode(nums_max)
    root.left = self.constructMaximumBinaryTree(nums[0:nums.index(nums_max)])
    root.right = self.constructMaximumBinaryTree(nums[nums.index(nums_max) + 1:])
    return root

中等难度题,有了框架,居然就这么简单

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值