首页 > 其他 > 详细

LeetCode110平衡二叉树

时间:2020-07-25 20:24:40      阅读:48      评论:0      收藏:0      [点我收藏+]

题目链接

https://leetcode-cn.com/problems/balanced-binary-tree/

题解

  • 递归解法
  • 平衡二叉树定义:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1
  • 递归函数返回值:如果平衡则返回该树的高度,空树则返回0,不平衡(左右子树不平衡或该结点不平衡)则返回-1
// Problem: LeetCode 110
// URL: https://leetcode-cn.com/problems/balanced-binary-tree/description/
// Tags: Tree DFS
// Difficulty: Easy

#include <iostream>
#include <algorithm>
using namespace std;

struct TreeNode{
    TreeNode* left;
    TreeNode* right;
    int val;
    TreeNode(int x):val(x), left(nullptr), right(nullptr){}
};

class Solution{
private:
    int recursion(TreeNode* root){//若该树平衡则返回其高度,不平衡则返回-1
        // 空树深度为0,也算平衡树
        if(root==nullptr)
            return 0;

        // 计算左子树和右子树深度
        int left=recursion(root->left);
        int right=recursion(root->right);

        // 若子树不平衡,则父树也不平衡(平衡二叉树定义:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1)
        if(left<0||right<0)
            return -1;
        
        // 左右子树平衡,则判断该树是否平衡
        if (abs(left-right)<=1)
            return max(left,right)+1;
        else
            return -1;
    }

public:
    bool isBalanced(TreeNode* root){
        return recursion(root)>=0;
    }
};

作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


LeetCode110平衡二叉树

原文:https://www.cnblogs.com/chouxianyu/p/13375961.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!