平衡二叉树判断

http://blog.csdn.net/qq_27703417/article/details/70960005

有一棵二叉树,请设计一个算法判断这棵二叉树是否为平衡二叉树。给定二叉树的根结点root,请返回一个bool值,代表这棵树是否为平衡二叉树。

  1. import java.util.*;
  2. //判断一棵二叉树是否是平衡二叉树,使用递归,以子树的高度作为返回值
  3. public class CheckBalance {
  4. public boolean check(TreeNode root) {
  5. //调用递归方法来判断是否是平衡的
  6. //如果返回-1表不平衡,如果返回一个具体的值,说明树平衡,返回的是树的高度值
  7. boolean result=this.getHeight(root)==-1?false:true;
  8. return result;
  9. }
  10. //这是一个递归的方法,用于返回一棵二叉树的高度,如果平衡返回高度,如果不平衡返回-1
  11. private int getHeight(TreeNode root){
  12. //基准情形
  13. if(root==null) return 0;
  14. //先求左子树的高度
  15. int leftHeight=this.getHeight(root.left);
  16. //判断左子树是否平衡,调用递归方法后总是认为这个方法已经全部执行完毕
  17. if(leftHeight==-1) return -1;
  18. //再求右子树的高度
  19. int rightHeight=this.getHeight(root.right);
  20. //判断右子树是否平衡
  21. if(rightHeight==-1) return -1;
  22. //判断高度差是否过大
  23. if(Math.abs(leftHeight-rightHeight)>1) return -1;
  24. //执行到此处说明二叉树平衡,返回此树的高度(子树较大值+1)
  25. return Math.max(leftHeight,rightHeight)+1;
  26. }
  27. }
时间: 2024-12-26 18:05:22

平衡二叉树判断的相关文章

剑指Offer37 二叉树深度与平衡二叉树判断

1 /************************************************************************* 2 > File Name: 37_TreeDepth.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年09月03日 星期六 09时49分38秒 6 ***************************************

平衡二叉树判断方法简介

判断该树是不是平衡的二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树.方法一:先序遍历 1.计算节点深度 private int height(BinaryNode root){ if(root == null) return 0; int left_height = height(root.left); int right_height = height(root.right); return 1 + (left_height > right_height

二叉树遍历的应用(路径和问题,判断是否是二叉搜索树,判断是否是二叉平衡树)

现在越发觉得关于树的问题真是千变万化,随便改一个条件又会是一个新的问题. 先序遍历求二叉树路径问题 问题:一棵二叉树每个节点包含一个整数,请设计一个算法输出所有满足条件的路径:此路径上所有节点之和等于给定值.注意此类路径不要求必须从根节点开始. 如果没有最后一个条件,这道题在leetcode上面见过,就是采取先序遍历的方式并记录下路径.但是加上最后一个条件后需要转下弯思考一下. 当然也需要记录下路径,并且记得要回溯.加上不要求从根节点开始这个条件后可以这么思考,每次遍历到当前节点时,从路径中查找

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. 判断一棵树是否属于平衡二叉树 判断主节点的左右节点深度大小差,如果不在

数据结构之二叉树总篇(Java)

前言 面试中的树都是二叉树,即有左右两个节点的树 牢记:root.left表示左子树,root.right表示右子树,通过树的递归解决问题 二叉树定义 public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } 求二叉树中节点的个数 递归 /** * 求二叉树中的节点个数递归解法: O(n) * (1

二叉树各种操作的总结

本篇文章部分参考轻松搞定面试中的二叉树题目实现. 求二叉树中的节点个数 求二叉树中叶子节点的个数 求二叉树的深度 求二叉树第K层的节点个数 递归遍历前序中序后序 非递归遍历前序中序后序层序 1 前序遍历 2 中序遍历 3 后序遍历 4 层序遍历 将二叉查找树变为有序的双向链表 判断两棵二叉树是否结构相同 判断二叉树是不是平衡二叉树 判断二叉树是否是搜索二叉树 求二叉树中两个节点的最低公共祖先节点 求二叉树中节点的最大距离 由前序遍历序列和中序遍历序列重建二叉树 1. 求二叉树中的节点个数 递归求

直通BAT算法精讲附程序源码

课程内容第1章 免费试看2 视频 | 2 练习字符串和二叉树问题免费试看1.1 二叉树打印 免费1.2 二叉树打印练习题 免费1.3 字符串 免费1.4 两串旋转练习题 免费 第2章 排序4 视频 | 16 练习详细介绍常见的排序算法过程,以及各个排序算法稳定性.时间和空间复杂度,当然还有常见面试题目的讲解.2.1 排序(1)2.2 冒泡排序练习题2.3 选择排序练习题2.4 插入排序练习题2.5 归并排序练习题2.6 快速排序练习题2.7 堆排序练习题 免费2.8 希尔排序练习题2.9 排序(

剑指offer算法总结

剑指offer算法学习总结 节选剑指offer比较经典和巧妙的一些题目,以便复习使用.一部分题目给出了完整代码,一部分题目比较简单直接给出思路.但是不保证我说的思路都是正确的,个人对算法也不是特别在行,只不过这本书的算法多看了几遍多做了几遍多了点心得体会.于是想总结一下.如果有错误也希望能指出,谢谢. 具体代码可以参考我的GitHub仓库: https://github.com/h2pl/SwordToOffer 数论和数字规律 从1到n整数中1出现的次数 题目描述 求出1~13的整数中1出现的

判断二叉树是不是平衡二叉树

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树.某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵二叉树. 我们很容易就能想到一个代码简洁却性能不佳的思路:在遍历树的每个结点的时候,调用函数TreeDpth得到它的左右子树的深度.如果每个结点的左右子树的深度相差都不超过1,按照定义它就是一棵平衡的二又树. 较好的思路是:用后序遍历的方式遍历整棵二叉树.在遍历某结点的左右子结点之后,我们可以根据它的左右子结点的深度判断它是不是平衡的,并得到当前结点的深度.当最后遍历到树的根结点