算法训练第十七天
654. 最大二叉树
代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):def constructMaximumBinaryTree(self, nums):""":type nums: List[int]:rtype: Optional[TreeNode]"""if len(nums)==0:return numsroot = TreeNode()root.val = max(nums)if len(nums)==1:return rootidx = nums.index(root.val)root.left = self.find(nums,0,idx-1)root.right = self.find(nums,idx+1,len(nums)-1)return rootdef find(self,nums,left,right):if right-left+1==0:return Nonenode = TreeNode()idx = leftfor i in range(left,right+1):if nums[i]>nums[idx]:idx = inode.val = nums[idx]node.left = self.find(nums,left,idx-1)node.right = self.find(nums,idx+1,right)return node
617.合并二叉树
代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):def mergeTrees(self, root1, root2):""":type root1: Optional[TreeNode]:type root2: Optional[TreeNode]:rtype: Optional[TreeNode]"""if root1 is None and root2 is None:return Noneif root1 is None and root2 is not None:return root2if root1 is not None and root2 is None:return root1ans = self.find(root1,root2)return ansdef find(self,node1,node2):if node1 is None and node2 is None:return Noneif node1 is None and node2 is not None:return node2if node1 is not None and node2 is None:return node1node = TreeNode()node.val = node1.val+node2.valnode.left = self.find(node1.left,node2.left)node.right = self.find(node1.right,node2.right)return node
700.二叉搜索树中的搜索
代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):def searchBST(self, root, val):""":type root: Optional[TreeNode]:type val: int:rtype: Optional[TreeNode]"""ans = self.find(root,val)return ansdef find(self,node,val):if node is None:return Noneif node.val==val:return nodeif val < node.val:return self.find(node.left,val)else:return self.find(node.right,val)
98.验证二叉搜索树
代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):def isValidBST(self, root):""":type root: Optional[TreeNode]:rtype: bool"""res = []self.find(root,res)for i in range(1,len(res)):if res[i]<=res[i-1]:return Falsereturn Truedef find(self,node,res):if node:self.find(node.left,res)res.append(node.val)self.find(node.right,res)