题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
解题思路:
1.从上到下,每个节点都计算一下左子树深度和右子树深度,然后计算差判断一下。
代码实现:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def depth(self,node):
if not node:
return 0
return 1 + max(self.depth(node.left),self.depth(node.right))
def IsBalanced_Solution(self, pRoot):
# write code here
if not pRoot:
return True
left = self.depth(pRoot.left)
right = self.depth(pRoot.right)
return abs(left - right) <= 1 and self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
时间复杂度为O(
N
2
N^{2}
N2)
2. 从下往上,剪枝:
代码实现:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def dfs(self,p):
if p is None:
return True
left = self.dfs(p.left)
if left == False:
return False
right = self.dfs(p.right)
if right == False:
return False
if abs(left - right) > 1:
return False
return max(left, right) + 1
def IsBalanced_Solution(self, pRoot):
# write code here
return self.dfs(pRoot)