递归算法判断是否是“平衡二叉树”

题目:

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1
递归算法判断是否是“平衡二叉树”_第1张图片

 输入:root = [3,9,20,null,null,15,7]
输出:true

 解题思路:

1.计算每个节点的深度

2.每个节点的左右子树高度差绝对值不超过

3.在判断时,不能只判断根节点,需要判断每个节点的左右子树的高度差

源代码如下:

class Solution {
public:
	//计算每个节点的深度
    int depth(TreeNode* root)
    {
        if(root==nullptr) return 0;
        return max(depth(root->left),depth(root->right))+1;
    }
    bool isBalanced(TreeNode* root) {
        if(root==nullptr) return true;
        //根节点的左右子树的深度差不能超过1
        //同时,二叉树的每个节点都是如此,所以不能少了对除了根节点以外的其他节点的判断
        //isBalanced(root->left)&&isBalanced(root->right)
        return abs(depth(root->left)-depth(root->right))<=1 && isBalanced(root->left)&&isBalanced(root->right);
    }
};

你可能感兴趣的:(算法,leetcode,c++,深度优先遍历)