平衡二叉树的定义:每个节点的左右子树的深度不超过1,所以先算一下左右最大深度,在依次算每个节点的左右深度,进行递归,但是这种方法,在进行上层遍历时候,会对下层的节点遍历次数过多。
# -*- 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 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):
if pRoot is None:
return 0
return max(self.TreeDepth(pRoot.left),self.TreeDepth(pRoot.right))+1
方法二:从下到上遍历,只要子树不满足,直接退出。
def IsBalanced_Solution(self, pRoot):
if not pRoot:
return True
# write code here
return self.dfs(pRoot)!=-1
def dfs(self,node):
if not node:
return 0
left=self.dfs(node.left)
if left==-1:
return -1
right=self.dfs(node.right)
if right==-1:
return -1
if abs(left-right)>1:
return -1
return max(left,right)+1