二叉树平衡检查

原创 2016年08月30日 13:42:51

题目描述

实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。
给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。

思路一:
用递归来遍历计算每个节点左右子树的高度,最后比较差值。时间复杂度O(N logN)。

public boolean isBalance(TreeNode root) {
    if (root == null)
        return true;
    int heightDiff = getHeight(root.left) - getHeight(root.right);
    if (Math.abs(heightDiff) > 1) {
        return false;
    } else {
        return isBalance(root.left) && isBalance(root.right);
    }
}

public int getHeight(TreeNode root) {
    if (root == null)
        return 0;
    return Math.max(getHeight(root.left), getHeight(root.right)) + 1;
}

思路二:
减少对getHeight的调用,一次遍历整棵树,在遍历的过程中就判断数是否是平衡的,如果不是返回-1,若是平衡的返回数的高度。时间复杂度O(N),空间复杂度O(H),其中H为树的高度

public boolean isBalance(TreeNode root) {
    if (checkHeight(root) == -1) {
        return false;
    } else {
        return true;
    }
}

public int checkHeight(TreeNode root) {
    if (root == null) {
        return 0;
    }

    int leftHeight = checkHeight(root.left);
    if (leftHeight == -1) {
        return -1;
    }

    int rightHeight = checkHeight(root.right);
    if (rightHeight == -1) {
        return -1;
    }

    int heigthDiff = leftHeight - rightHeight;
    if (Math.abs(heigthDiff) > 1) {
        return -1;
    } else {
        return Math.max(leftHeight, rightHeight) + 1;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

【Java】检查二叉树是否平衡。

实现一个函数,检查二叉树是否平衡。 二叉树平衡的定义如下:任意一个结点,其两颗子树的高度差不超过1 递归访问每个整棵树,计算每个结点子树的高度 public class BTreeBalance...
  • michellechouu
  • michellechouu
  • 2015年07月14日 10:10
  • 2415

《程序员面试金典》二叉树平衡检查

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 题目链接:http://www.nowcoder.com/p...
  • libin1105
  • libin1105
  • 2015年09月16日 16:31
  • 859

leetcode的判断一个二叉树是否是平衡树

110. Balanced Binary Tree   Given a binary tree, determine if it is height-balanced. ...
  • justperseve
  • justperseve
  • 2016年10月18日 22:10
  • 587

《程序员面试金典》--平衡二叉树的检测

题目描述:        实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool...
  • zdplife
  • zdplife
  • 2015年10月06日 11:25
  • 839

java 判断一个二叉树是不是平衡二叉树

题目:Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bina...
  • diu_brother
  • diu_brother
  • 2016年04月27日 17:48
  • 1948

二叉树平衡检查

题目描述 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。 给定指向树根结点的指针TreeNode* root,请返回一个bool...
  • u010817474
  • u010817474
  • 2015年08月25日 15:22
  • 250

检查二叉树是否平衡

实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个结点,其两棵子树的高度差不超过1.               直接递归访问整棵树,计算每个结点两棵子树的高度。 public...
  • wangfengfan1
  • wangfengfan1
  • 2015年08月21日 22:21
  • 548

二叉树平衡检查(Java)

题目描述 实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。 给定指向树根结点的指针TreeNode* root,请返回一个bool...
  • feige1990
  • feige1990
  • 2015年08月25日 12:29
  • 402

高度平衡的二叉树

/** * 题目 * 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是: * 一棵二叉树中每个节点的两个子树的深度相差不会超过1。 * 例二叉树:先序 ...
  • qq_17525769
  • qq_17525769
  • 2017年01月08日 22:19
  • 446

判断二叉平衡树的三种方法

题目 实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下,任意一个节点,其两颗子树的高度差不超过1。 分析 判断平衡二叉树是一个常见题目,一般来说,我们都是求出左右子树的高度,根据定义判...
  • fly_yr
  • fly_yr
  • 2016年08月10日 15:33
  • 911
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树平衡检查
举报原因:
原因补充:

(最多只允许输入30个字)