【leetcode】110. Balanced Binary Tree

来源:互联网 发布:算法基本特征 编辑:程序博客网 时间:2024/05/16 16:21

一、题目描述

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.


题目解读:判断一棵树是否是平衡二叉树。平衡二叉树满足的条件(1)两边的子树的高度相差不超过1。(2)两棵子树都是平衡二叉树


思路:针对条件(1)要比较高度的话,需要写一个函数求一棵树的高度。

   针对条件(2)很容易就想到可以用递归的方法


c++代码(16ms,14.24%)

/** * 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 height(TreeNode* root){        //求一棵树的高度        if(root == NULL)            return 0;        else if((root->left == NULL) && (root->right == NULL))            return 1;        else            return max(height(root->left), height(root->right))+1;    }        bool isBalanced(TreeNode* root) {        if(root ==  NULL)            return true;        else if((root->left == NULL) && (root->right == NULL))            return true;        else{            if(abs(height(root->left)-height(root->right)) > 1)                return false;            else                return (isBalanced(root->left) && isBalanced(root->right));        }    }};


思路一样,代码可以进一步简化为:

class solution {public:    int depth (TreeNode *root) {        if (root == NULL) return 0;        return max (depth(root -> left), depth (root -> right)) + 1;    }    bool isBalanced (TreeNode *root) {        if (root == NULL) return true;        int left=depth(root->left);        int right=depth(root->right);        return abs(left - right) <= 1 && isBalanced(root->left) && isBalanced(root->right);    }};


代码2:

class solution {public:int dfsHeight (TreeNode *root) {        if (root == NULL) return 0;        int leftHeight = dfsHeight (root -> left);        if (leftHeight == -1) return -1;        int rightHeight = dfsHeight (root -> right);        if (rightHeight == -1) return -1;        if (abs(leftHeight - rightHeight) > 1)  return -1;        return max (leftHeight, rightHeight) + 1;    }    bool isBalanced(TreeNode *root) {        return dfsHeight (root) != -1;    }};




0 0
原创粉丝点击