剑指 offer代码解析——面试题39推断平衡二叉树

时间:2023-02-20 00:24:47

题目:输入一颗二叉树的根结点。推断该树是不是平衡二叉树。

假设某二叉树中随意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树。

分析:所谓平衡二叉树就是要确保每一个结点的左子树与右子树的高度差在-1到1之间。

因为之前一题已经给出了二叉树高度的计算方法,因此本题最直观的思路就是分别计算每一个结点的左子树高和右子树高,从而推断一棵树的全部结点是否均为平衡二叉树。

/**
* 题目:输入一颗二叉树的根结点。推断该树是不是平衡二叉树。 * 假设某二叉树中随意结点的左右子树的高度相差不超过1,那么它就是一棵平衡二叉树。
* @author 大闲人柴毛毛
* @date 2016年4月2日
*/
public class BalanceTree {
/**
* 分析:所谓平衡二叉树就是要确保每一个结点的左子树与右子树的高度差在-1到1之间。
* 因为之前一题已经给出了二叉树高度的计算方法。因此本题最直观的思路就是分别计算每一个结点的左子树高和右子树高,从而推断一棵树的全部结点是否均为平衡二叉树。
* 代码例如以下:
*/ public static <T> boolean isBalanceTree_1(Node<T> root){
//健壮性推断:若树为空
if(root==null){
System.out.println("树为空! ");
return true;
} // 计算左子树高
int left_height = TreeHeight.getTreeHeight(root.left);
// 计算右子树高
int right_height = TreeHeight.getTreeHeight(root.right);
// 计算高度差
int mid = left_height - right_height;
// 推断高度差是否为-1、0、1
if (mid == -1 || mid == 0 || mid == 1)
// 若当前结点是平衡二叉树。则计算左子树和右子树是否为平衡二叉树
return (isBalanceTree_1(root.left) && isBalanceTree_1(root.right));
// 若当前结点不是二叉平衡树,则返回false
else
return false;
} /**
* 測试
*/
public static void main(String[] args){
//构造一棵平衡二叉树
Node<Integer> node1 = new Node<Integer>();
Node<Integer> node2 = new Node<Integer>();
Node<Integer> node3 = new Node<Integer>();
Node<Integer> node4 = new Node<Integer>();
Node<Integer> node5 = new Node<Integer>();
Node<Integer> node6 = new Node<Integer>();
Node<Integer> node7 = new Node<Integer>();
Node<Integer> node8 = new Node<Integer>();
Node<Integer> node9 = new Node<Integer>(); node1.data = 1;
node2.data = 2;
node3.data = 3;
node4.data = 4;
node5.data = 5;
node6.data = 6;
node7.data = 7;
node8.data = 8;
node9.data = 9; node1.left = node2;
node1.right = node3;
node2.left = node4;
node2.right = node5;
node5.left = node7;
node3.right = node6;
// node7.left = node8;
// node8.left = node9; System.out.println(isBalanceTree_1(node1));
}
}

剑指 offer代码解析——面试题39推断平衡二叉树的更多相关文章

  1. 剑指Offer——乐视笔试题&plus;知识点总结

    剑指Offer--乐视笔试题+知识点总结 情景回顾 时间:2016.9.19 15:10-17:10 地点:山东省网络环境智能计算技术重点实验室 事件:乐视笔试   总体来说,乐视笔试内容体量不算少, ...

  2. 剑指Offer——携程笔试题&plus;知识点总结

    剑指Offer--携程笔试题+知识点总结 情景回顾 时间:2016.9.17 19:10-21:10 地点:山东省网络环境智能计算技术重点实验室 事件:携程笔试 总体来说,携程笔试内容与其它企业笔试题 ...

  3. 剑指Offer——京东实习笔试题汇总

    剑指Offer--京东实习笔试题汇总 编程题1 题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息. n.s.B.S其中n代表委托信息,s要求的最有价值的委托信息的个数,B代表买入 ...

  4. 剑指Offer——顺丰笔试题&plus;知识点总结

    剑指Offer--顺丰笔试题+知识点总结 情景回顾 时间:2016.10.16 19:00-20:40 地点:山东省网络环境智能计算技术重点实验室 事件:顺丰笔试 知识点总结 快排 霍尔排序(快排) ...

  5. 剑指Offer——京东校招笔试题&plus;知识点总结

    剑指Offer--京东校招笔试题+知识点总结 笔试感言 经过一系列的笔试,发觉自己的基础知识还是比较薄弱的,尤其是数据结构和网络,还有操作系统.工作量还是很大的.做到精确制导的好方法就是在网上刷题,包 ...

  6. 剑指Offer——CVTE校招笔试题&plus;知识点总结&lpar;Java岗&rpar;

    剑指Offer(Java岗)--CVTE校招笔试题+知识点总结 2016.9.3 19:00参加CVTE笔试,笔试内容如下: 需要掌握的知识:Linux基本命令.网络协议.数据库.数据结构. 选择题 ...

  7. 《剑指Offer》各面试题总结

    目录 前言 面试题4 二维数组的查找 面试题5:替换空格 面试题6:从尾到头打印链表 面试题7:重建二叉树 面试题8:二叉树的下一个节点 面试题9:用两个栈实现队列 面试题10:斐波那契数列 面试题1 ...

  8. 剑指offer代码 vs2013执行

    方法: 代码文件夹名称为:CodingInterviewChinese2-master 1. 用vs2013加载解决方案 .sln文件 2. 一个解决方案下面有多个项目,通过右键解决方案->属性 ...

  9. 【剑指Offer面试题】九度OJ1384:二维数组中的查找

    下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题&gt ...

随机推荐

  1. Entity Framework 不支持DefaultValue

    http://*.com/questions/18506088/entityframework-not-updating-column-with-default-value Y ...

  2. 朗逸2011款 1&period;4t 清除保养告警灯

    朗逸2011款 1.4t 清除保养告警灯 Posted on 2015-03-01 21:06 编辑 仪表盘上有两个按钮 按住右边set键,钥匙旋转到通电状态,保持2s. 放掉set,按左边的切换按钮 ...

  3. POJ 3258

    River Hopscotch Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5961   Accepted: 2579 D ...

  4. linux 0&period;11 源码学习&plus; IO模型

    http://www.cnblogs.com/Fredric-2013/category/696688.html

  5. Python自动化之5种session类型

    Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session Django默认支持Se ...

  6. execlp函数使用

    原文:http://blog.sina.com.cn/s/blog_6a1837e901011167.html execlp(从PATH 环境变量中查找文件并执行)   相关函数:   fork,ex ...

  7. python学习日记(面向对象——组合)

    组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积.圆环的周长是内部圆的周长加上外部圆的周长.这个时候,我们就首先实现一 ...

  8. Oracle创建表空间、用户管理、角色管理

    内容:Oracle创建表空间.用户管理.角色管理 1.用系统用户登录Oracle 默认的系统用户: sys/system.sysman.scott sys:权限最大,超级用户,可以完成所有任务, 默认 ...

  9. JQuery实现表格自动增加行,对新行添加事件

    实现功能: 通常在编辑表格时表格的行数是不确定的,如果一次增加太多行可能导致页面内容太多,反应变慢:通过此程序实现表格动态增加行,一直保持最下面有多个空白行. 效果: 一:原始页面 二:表1增加新行并 ...

  10. tomcat Error&colon;NB&colon;JAVA&lowbar;HOME should point to a JDK not a JRE 解决方法

    环境:win7 tomcata7.0解压版本 执行:service.bat install 报错:JAVA_HOME should point to a JDK not a JRE 网上找了几种解决方 ...