思路
把最大数作为root,数组的左右作为左子树和右子树,继续递归
用left,right来标记数组的索引
从左到右遍历,找出区间内的最大值,记录下索引
把索引值作为根节点,在左右子树上进行递归
终止条件:区间为空
代码
# 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 constrtuct(left,right):
if left>right:
return None
best=left
for i in range(left+1,right+1):
if nums[i]>nums[best]:
best=i
node=TreeNode(nums[best])
node.left=constrtuct(left,best-1)
node.right=constrtuct(best+1,right)
return node
return constrtuct(0,len(nums)-1)
思路
当前节点有一个为空,直接返回对应的节点
否则返回两个节点的和
继续在左右子树上进行递归
代码
# 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 mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
if not root1:
return root2
if not root2:
return root1
merged=TreeNode(root1.val+root2.val)
merged.left=self.mergeTrees(root1.left,root2.left)
merged.right=self.mergeTrees(root1.right,root2.right)
return merged
思路
如果节点为空或者找到节点:返回节点
接着在左右子树上递归寻找节点
代码
# 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 searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:
if not root or root.val==val:
return root
if root.val>val:
return self.searchBST(root.left,val)
if root.val<val:
return self.searchBST(root.right,val)