二叉树平衡检查

原创 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;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

程序员面试金典: 9.4树与图 4.1实现一个函数检查二叉树是否平衡。

#include #include #include using namespace std; /* 问题:实现一个函数,检查二叉树是否平衡。在这个问题中,平衡树的定义如下:任意一个节点,其...

程序员面试金典:二叉树平衡检查、有向路径检查

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

Chapter 4 | Trees and Graphs--检查一棵树是否平衡以及判断一棵树是否为平衡二叉树

4.1  Implement a function to check if a tree is balanced. For the purposes of this question, a balan...

平衡二叉树源码

  • 2015年05月14日 10:23
  • 5KB
  • 下载

java-带平衡条件的二叉树

  • 2015年08月05日 20:01
  • 2KB
  • 下载

Balanced Binary Tree 平衡二叉树的检验

检验二叉树是否为Given a binary tree, determine if it is height-balanced. For this problem, a height-balan...

C语言实现平衡二叉树

  • 2015年08月10日 22:21
  • 7KB
  • 下载

平衡二叉树

  • 2008年07月02日 20:01
  • 12KB
  • 下载

数据结构实验之查找二:平衡二叉树

提示 一定要记住每一步的回溯,搞清楚根节点是什么,根据二叉树的左右子树的高度差来判断进行什么样的调整 1.调整方法 (1)插入点位置必须满足二叉查找树的性质,即任意一棵子树的左结点都小于根结点...

平衡二叉树产生

  • 2011年12月11日 21:19
  • 10KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树平衡检查
举报原因:
原因补充:

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