110. Balanced Binary Tree
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
110.平衡二叉树
给定一棵二叉树,判定其是否是高度平衡的
在这个问题中,一棵高度平衡的二叉树定义为两棵子树的高度差不超过1,并且两棵子树也分别是高度平衡的。
思路:很明显的调用递归解决的题。分别递归判定左子树和右子树是否为高度平衡的,不是直接返回false,如果左右子树都分别是高度平衡的,再判断当前是否为高度平衡的。先递归获取左子树和右子树的高度,然后根据高度差得到是否为高度平衡。需要注意的是递归终点是根为NULL时,直接返回true即可,这也与输入的特殊情况一致。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int getDepth(struct TreeNode* root){
if (root == NULL) return 0;
int depthl = getDepth(root->left);
int depthr = getDepth(root->right);
return depthl>depthr?depthl+1:depthr+1;
}
bool isBalanced(struct TreeNode* root) {
if (root == NULL) return true;
if (!isBalanced(root->left)) return false;
if (!isBalanced(root->right)) return false;
int depthl = getDepth(root->left);
int depthr = getDepth(root->right);
int diff = depthl - depthr;
if (diff < 2 && diff > -2){
return true;
}
else return false;
}
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isBalanced(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root: return True
if not self.isBalanced(root.left): return False
if not self.isBalanced(root.right): return False
depthl = self.getDepth(root.left)
depthr = self.getDepth(root.right)
diff = depthl - depthr
if (diff < 2 and diff > -2): return True
else: return False
def getDepth(self, root):
if not root: return 0
depthl = self.getDepth(root.left)
depthr = self.getDepth(root.right)
return depthl+1 if depthl>depthr else depthr+1