美文网首页
每日Leetcode—算法(11)

每日Leetcode—算法(11)

作者: Chuck_Wu | 来源:发表于2019-05-12 21:32 被阅读0次

    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)

          本文链接:https://www.haomeiwen.com/subject/wqecaqtx.html