每日Leetcode—算法(11)

110.平衡二叉树

算法:

def isBalanced(self, root: TreeNode) -> bool:
    def depth(node):    #直接创建一个树深函数
        if not node:    #如果空树,返回0
            return 0
        left = depth(node.left)     #计算左子树的树深
        right = depth(node.right)   #计算右子树的树深
        if left == -1 or right == -1 or abs(left-right)>1:     #如果满足其中一个条件,返回-1
            return -1
        return 1 + max(left,right)    #返回最大树深+1
    return depth(root) != -1     #判断是否函数返回值是否为-1

111.二叉树的最小树深

算法:

def minDepth(self, root: TreeNode) -> int:
    if not root:   #树为空,返回0
        return 0
    if not root.left and not root.right:   #考虑四种情况,一是没有子节点
        return 1
    elif not root.left:            #二是没有左孩子
        return 1 + self.minDepth(root.right)      #所以将右孩子进行递归
    elif not root.right:          #三是没有右孩子
        return 1 + self.minDepth(root.left)        #所以将左孩子进行递归
    else:
        return 1 + min([self.minDepth(root.left), self.minDepth(root.right)])    #四是有两个孩子节点,递归后返回树深,取较小的一个

112.路径总和

算法:

def hasPathSum(self, root: TreeNode, sum: int) -> bool:
    if not root:     #root为空的情况
        return False
    if root.val == sum and not root.left and not root.right      #只有根节点的情况
        return True
    return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val)             #利用节点与sum的差值进行递归

你可能感兴趣的:(每日Leetcode—算法(11))