本文共 1494 字,大约阅读时间需要 4 分钟。
此题为 的拓展,建议先做上一题。
该方法基于以下性质推出: 此树的深度 等于 左子树的深度 与 右子树的深度 中的 最大值 +1
【方法】后序遍历 + 剪枝 (从底至顶)【思路】对二叉树做后序遍历,从底至顶返回子树深度,若判定某子树不是平衡树则 “剪枝” ,直接向上返回。
【算法流程】
recur(root) 函数:
isBalanced(root) 函数:
返回值: 若 recur(root) != -1 ,则说明此树平衡,返回 truetrue ; 否则返回 falsefalse 。
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass 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 # 左右子树只差大于1,也不是为平衡二叉树 # 可简化为三目运算: # return max(left, right) + 1 if abs(left - right) <= 1 else -1 if abs(left-right)<=1: return max(left,right)+1 else: return -1 return recur(root)!=-1递归 2 的左子树 1 递归 2 的右子树 7 回溯到节点2 回溯到root节点3
复杂度分析:
https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/9hscjv/
转载地址:http://xyjii.baihongyu.com/