654. 最大二叉树
题目描述
解题思路
这是一个构造二叉树的题目,特殊点在于每次选择最大值作为节点
按照前序遍历来解题:
- 首先找到最大值及其索引
- 构建节点,递归调用完成左右子树的构建。这里需要注意左右子树的索引位置及递归结束的条件。
代码实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def constructMaximumBinaryTree(self, nums: List[int]) -> TreeNode:
"""
1. 找出最大值和其索引
2. 递归调用获取左右子树
"""
root = self.bulid(nums, 0, len(nums)-1)
return root
def bulid(self, nums: List[int], start: int, end: int) -> TreeNode:
if start > end:
return None
max_val = float('-inf')
index = -1
for idx in range(start, end+1):
if nums[idx] > max_val:
max_val = nums[idx]
index = idx
root = TreeNode(nums[index])
root.left = self.bulid(nums, start, index-1)
root.right = self.bulid(nums, index+1, end)
return root