代码随想录算法训练营第20天| 617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树

617. 合并二叉树:


代码思路

# 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]:
        def dfs(node1, node2):
            if node1 != None and node2 != None:
                new_node = TreeNode(node1.val + node2.val)
                new_node.left = dfs(node1.left, node2.left)
                new_node.right = dfs(node1.right, node2.right)
            elif node1 == None and node2 != None:
                new_node = TreeNode(node2.val)
                new_node.left = dfs(None, node2.left)
                new_node.right = dfs(None, node2.right)
            elif node2 == None and node1 != None:
                new_node = TreeNode(node1.val)
                new_node.left = dfs(node1.left, None)
                new_node.right = dfs(node1.right, None)
            else:
                return None

            return new_node
            
        return dfs(root1, root2)

700. 二叉搜索树中的搜索:


代码思路

# 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]:
        def dfs(node):
            if not node:
                return
            if node.val == val:
                return node
            else:
                if node.val < val:
                    return dfs(node.right)
                else:
                    return dfs(node.left)
        return dfs(root)

98. 验证二叉搜索树:


代码思路

递归老套路,但是这题不太容易发现。
就是判断这棵树是否是平衡,那要看左右子树是否平衡。但这题难点是涉及三代节点。
但是其实,每棵子树可以传入lowest和highest。画出具体包含每个节点区间的树的图就会很明显得到每个节点的最小值和最大值的递归形式。然后把这最小值和最大值传入到这个递归函数就好。
举个例子:5如果是root,左子节点的最小值和最大值就可以得到,而且你存了下来,这样孙子节点也可以继承爷爷节点的区间值。看起来很巧妙,但是其实画出包含每个节点区间的树状图就很明显!图形结合百般好啊!!!
(-∞,5) 5 (5,+∞)

# 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 isValidBST(self, root: Optional[TreeNode]) -> bool:
        def validate(node, lowest, highest):
            if node == None:
                return True
            if node.val <= lowest or node.val >= highest:
                return False

            return validate(node.left, lowest, node.val) and validate(node.right, node.val, highest)           
        return validate(root, float("-inf"), float("+inf"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值