第39题 平衡二叉树
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
return depth(pRoot) != -1;
}
int depth(TreeNode* root){
if(!root) return 0;
int ldep = depth(root->left);
if(ldep == -1) return -1;
int rdep = depth(root->right);
if(rdep == -1) return -1;
int sub = abs(ldep - rdep);
if(sub>1) return -1;
return max(ldep,rdep)+1;
}
};
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
def depth(head):
if not head:
return 0
l = depth(head.left)
if l == -1:
return -1
r = depth(head.right)
if r == -1:
return -1
d = abs(l - r)
if d > 1:
return -1
return max(l, r) + 1
return depth(root)!=-1
思路:
使用depth函数递归调用,空节点返回0值,递归调用左右子节点,如果有-1,则返回-1,然后计算左右子节点的差值,超过1也返回-1。最后没有返回-1,则返回左右子节点较大值+1。