LeetCode110-平衡二叉树

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

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

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
在这里插入图片描述
原题传送

求解平衡树我们需要知道的是:二叉平衡树的每个节点树的左右子树高度差不超过1,那么我们需要考虑的事情自然有两件:1、每棵树的左右节点高度求解,2、树中每个节点树是否满足平衡条件;

求解高度差我们可以简单写一个递归函数:
求某一节点的深度可以转化为该节点子树的最大深度加上节点本身的深度1,递归退出条件为节点为空,返回值是节点子树的最大深度

	int max_Depth(TreeNode* root) {
    
    
		if (root == nullptr)
			return 0;
		int left = max_Depth(root->left);
		int right = max_Depth(root->right);
		int maxDepth = max(left, right) + 1;
		return maxDepth;
	}

我们得到了每个节点的最大深度,自然可以进行下一步的比较,需要注意的是每一个子树都需要比较:

bool isBalanced(TreeNode* root) {
    
    
        if (root == nullptr)
            return true;
        return abs(MaxDepth(root->left) - MaxDepth(root->right))<=1 && isBalanced(root->left) && isBalanced(root->right);//先序判断树中每个节点是否满足平衡条件
    }

完整代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
    
    
public://求出每个节点的深度
   int  MaxDepth(TreeNode* root) {
    
    
        if (root == nullptr)
            return 0;
        return max(MaxDepth(root->left),MaxDepth(root->right))+1;
    }

    bool isBalanced(TreeNode* root) {
    
    
        if (root == nullptr)
            return true;
        return abs(MaxDepth(root->left) - MaxDepth(root->right))<=1 && isBalanced(root->left) && isBalanced(root->right);//先序判断树中每个节点是否满足平衡条件
    }
};

猜你喜欢

转载自blog.csdn.net/Genius_bin/article/details/113372504