剑指offer面试题55 - II. 平衡二叉树(后序遍历)(剪枝)

题目描述

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
剑指offer面试题55 - II. 平衡二叉树(后序遍历)(剪枝)_第1张图片

思路

详见链接

代码

class Solution:
	def isBalanced(self, root:TreeNode)->bool:
		def recur(root):
			if not root: return return 0
			left = recur(root.left)
			if left == -1: return -1
			right = recur(root.right)
			if right == -1: return -1
			return max(left, right) + 1 if abs(left-right)<=1 else -1
		return recur(root) != -1

复杂度

时间复杂度 O(N): N 为树的节点数;最差情况下,需要递归遍历树的所有节点。
空间复杂度 O(N): 最差情况下(树退化为链表时),系统递归需要使用 O(N)的栈空间。

你可能感兴趣的:(剑指offer,平衡二叉树,后序遍历,剪枝,剑指offer,Python)