Balanced Binary Tree --Leetcode C++

递归

  • 左子树是否为平衡二叉树
  • 右子树是否为平衡二叉树
  • 左右子树高度差是否大于1,大于1,返回false
  • 否则判断左右子树

最简单的理解方法就是如下的思路:

class Solution {
public:
    bool isBalanced(TreeNode* root) {
        if(root==NULL){
            return true;
        }
        int ldepth=depth(root->left);
        int rdepth=depth(root->right);
        if(abs(ldepth-rdepth)>1)return false;
        else{
            return isBalanced(root->left)&&isBalanced(root->right);
        }
    }
    int depth(TreeNode *root){
        if(root==NULL){
            return 0;
        }
        int lleft=depth(root->left);
        int trigth=depth(root->right);
        return lleft>trigth ? lleft+1:trigth+1;

    }
};

在上面的方法中,每一个节点都会计算节点左子树和右子树的高度,存在大量的重复计算

所以,采用自底向上的方式

class Solution2 {
public:
    bool isBalanced(TreeNode* root) {
        if(root==NULL){
            return true;
        }
        int height=getheight(root);
        if(height==-1){
            return false;
        }
        return true;
    }
    int getheight(TreeNode *root){
        if(root==NULL){
            return 0;
        }
        int lleft=getheight(root->left);
        int trigth=getheight(root->right);
        if(lleft==-1||trigth==-1){
            return -1;
        }
        if(abs(lleft-trigth)>1){
            return -1;
        }
        return lleft>trigth? lleft+1:trigth+1;
    }
};
时间: 2024-10-25 07:43:17

Balanced Binary Tree --Leetcode C++的相关文章

Balanced Binary Tree leetcode java

题目: 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. 题解: 采用递归的方法,要记录depth用来比较. 代码如下:

110.Balanced Binary Tree Leetcode解题笔记

110.Balanced Binary Tree 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. 很早以前做的了  准

[Lintcode]93. Balanced Binary Tree/[Leetcode]

93. Balanced Binary Tree/ 本题难度: Easy Topic: Binary Tree Description 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 n

Balanced Binary Tree Leetcode

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. 这道题一开始的做法比较简单粗暴. public class Solut

LeetCode OJ - Balanced Binary Tree

判断树是否是平衡的,这道题中的平衡的概念是指任意节点的两个子树的高度相差不超过1,我用递归的方法把所有的节点的高度都计算了下,并且在计算的过程记录每个节点左右两颗子树的高度差,最后通过遍历这个高度差就可以知道是否是平衡的. 下面是AC代码: 1 /** 2 * Given a binary tree, determine if it is height-balanced. 3 * For this problem, a height-balanced binary tree is defined

LeetCode 110. Balanced Binary Tree 递归求解

题目链接:https://leetcode.com/problems/balanced-binary-tree/ 110. Balanced Binary Tree My Submissions Question Total Accepted: 97926 Total Submissions: 292400 Difficulty: Easy Given a binary tree, determine if it is height-balanced. For this problem, a h

[LeetCode][JavaScript]Balanced Binary Tree

Balanced Binary Tree 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. https://leetco

LeetCode——Balanced Binary Tree

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. 中文:给定一棵二叉树,检测其高度上平衡否. 于此题,一棵高度上平衡的二

[leetcode]Balanced Binary Tree @ Python

原题地址:http://oj.leetcode.com/problems/balanced-binary-tree/ 题意:判断一颗二叉树是否是平衡二叉树. 解题思路:在这道题里,平衡二叉树的定义是二叉树的任意节点的两颗子树之间的高度差小于等于1.这实际上是AVL树的定义.首先要写一个计算二叉树高度的函数,二叉树的高度定义为:树为空时,高度为0.然后递归求解:树的高度 = max(左子树高度,右子树高度)+1(根节点要算上).高度计算函数实现后,递归求解每个节点的左右子树的高度差,如果有大于1的