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的差值进行递归
网友评论