- 构造二叉树的一般思路,比前后序或中后序构造害更不容易错一些
class Solution:
def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:
if len(nums)==0:
return None
rootVal = max(nums)
idx = nums.index(rootVal)
root = TreeNode(rootVal)
root.left = self.constructMaximumBinaryTree(nums[:idx])
root.right = self.constructMaximumBinaryTree(nums[idx+1:])
return root
class Solution:
def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
if not root1 and not root2:
return None
val = 0
val += root1.val if root1 else 0
val += root2.val if root2 else 0
root = TreeNode(val)
if root1 and root2:
root.left = self.mergeTrees(root1.left,root2.left)
root.right = self.mergeTrees(root1.right,root2.right)
elif not root2:
root.left = self.mergeTrees(root1.left,None)
root.right = self.mergeTrees(root1.right,None)
else:
root.left = self.mergeTrees(None,root2.left)
root.right = self.mergeTrees(None,root2.right)
return root
class Solution:
def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
if not root1:
return root2
if not root2:
return root1
root = TreeNode(root1.val+root2.val)
root.left = self.mergeTrees(root1.left,root2.left)
root.right = self.mergeTrees(root1.right,root2.right)
return root