程序员面试金典:检查平衡性

检查平衡性

    • 题目描述
    • 我的解题

题目描述

实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其两棵子树的高度差不超过 1

我的解题

  1. 求树的深度
  2. 依次判断
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int deep(TreeNode* root)
    {
        if(root==nullptr) return 0;
        int left = deep(root->left)+1;
        int right = deep(root->right)+1;
        return left>right?left:right;
    }

    bool isBalanced(TreeNode* root) {
        if(root==nullptr) return true;
        int left = deep(root->left);
        int right = deep(root->right);
        if(abs(left-right)>1) return false;
        return isBalanced(root->left) & isBalanced(root->right);
    }
};

你可能感兴趣的:(C++,leetcode,算法)