1、题目描述:
2、题解:
深度优先搜索DFS:
思路:
思想:
就是判断左右子树是不是平衡二叉树
算法步骤:
1、递归的出口: 如果是空,则返回深度0
2、递归得到左子树,如果不是平衡二叉树,返回-1;
3、递归得到右子树,如果不是平衡二叉树,返回-1;
4、如果左右子树深度差不超过2,则返回max(left,right) + 1 ,否则返回-1(代表不是二叉平衡树
最后调用recur后,如果不是-1,才表明是二叉平衡树
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
#深度优先搜索
def recur(root):
if not root:
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) < 2 else -1
return recur(root) != -1
3、复杂度分析:
时间复杂度:O(N),N为树的结点数,最差情况下,需要递归遍历树的所有节点
空间复杂度:O(N),最差情况(树退化为链表),系统递归需要使用O(N)的栈空间