题目:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路一:
递归求子树最大深度差O(n**2)
代码:
class Solution:
def IsBalanced_Solution(self, pRoot):
def depth(root):
if not root: return 0
left = depth(root.left)
right = depth(root.right)
return max(left, right)+1
if not pRoot: return True
return abs(depth(pRoot.left)-depth(pRoot.right))<2 and \
self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
思路二:
从下往上遍历,如果子树是平衡二叉树,则返回子树的高度;如果发现子树不是平衡二叉树,则直接停止遍历O(n)
代码:
class Solution:
def IsBalanced_Solution(self, pRoot):
def depth(root):
if not root: return 0
left = depth(root.left)
if left == -1: return -1
right = depth(root.right)
if right == -1: return -1
return -1 if abs(left-right)>1 else max(left, right)+1
if not pRoot: return True
return depth(pRoot) != -1