应用题-二叉树专题-最大二叉树

管理员
**线性求最大值** ```python # 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]) -> Optional[TreeNode]: def get_max_idx( start, end ): max_idx = start for i in range( start + 1, end ): if nums[ max_idx ] < nums[ i ]: max_idx = i return max_idx def build( start, end ): if start >= end: return None root_idx = get_max_idx( start, end ) root_val = nums[ root_idx ] root = TreeNode( root_val ) root.left = build( start, root_idx ) root.right = build( root_idx + 1, end ) return root return build( 0, len( nums ) ) ``` **单调栈** ```python # 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]) -> Optional[TreeNode]: # 存储节点 保持单调递减 ( 自底向上 ) stack = [] for v in nums: node = TreeNode( v ) # 当前节点大于栈顶 栈中元素是当前节点的左子树 # 栈中最大的元素节点 作为该节点的左孩子 while stack and v > stack[ -1 ].val: node.left = stack.pop() # 当前节点小于栈顶 显然是该栈顶的右孩子 if stack: stack[ -1 ].right = node stack.append( node ) return stack[ 0 ] # 栈底元素就是最大的 ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧