题目描述:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
解题方案:
这里我取了个巧,直接用val存储节点的层数。
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def IsBalanced_Solution(self, pRoot):
# write code here
if not pRoot:
return True
if not (self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)):
return False
if not pRoot.left and not pRoot.right:
pRoot.val = 1
return True
left, right = 0, 0
if pRoot.left:
left = pRoot.left.val
if pRoot.right:
right = pRoot.right.val
if abs(left - right) > 1:
return False
pRoot.val = max(left, right) + 1
return True
如果不改变val值,需要重写递归函数:
class Solution:
def IsBalanced_Solution(self, pRoot):
# write code here
if pRoot == None:
return True
if abs(self.TreeDepth(pRoot.left)-self.TreeDepth(pRoot.right)) > 1:
return False
return self.IsBalanced_Solution(pRoot.left) and self.IsBalanced_Solution(pRoot.right)
def TreeDepth(self, pRoot):
# write code here
if pRoot == None:
return 0
nLeft = self.TreeDepth(pRoot.left)
nRight = self.TreeDepth(pRoot.right)
return max(nLeft+1,nRight+1)#(nLeft+1 if nLeft > nRight else nRight +1)