剑指 offer代码解析——面试题39推断平衡二叉树
题目:输入一颗二叉树的根结点。推断该树是不是平衡二叉树。
假设某二叉树中随意结点的左右子树的高度相差不超过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推断平衡二叉树的更多相关文章
- 剑指Offer——乐视笔试题+知识点总结
剑指Offer--乐视笔试题+知识点总结 情景回顾 时间:2016.9.19 15:10-17:10 地点:山东省网络环境智能计算技术重点实验室 事件:乐视笔试 总体来说,乐视笔试内容体量不算少, ...
- 剑指Offer——携程笔试题+知识点总结
剑指Offer--携程笔试题+知识点总结 情景回顾 时间:2016.9.17 19:10-21:10 地点:山东省网络环境智能计算技术重点实验室 事件:携程笔试 总体来说,携程笔试内容与其它企业笔试题 ...
- 剑指Offer——京东实习笔试题汇总
剑指Offer--京东实习笔试题汇总 编程题1 题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息. n.s.B.S其中n代表委托信息,s要求的最有价值的委托信息的个数,B代表买入 ...
- 剑指Offer——顺丰笔试题+知识点总结
剑指Offer--顺丰笔试题+知识点总结 情景回顾 时间:2016.10.16 19:00-20:40 地点:山东省网络环境智能计算技术重点实验室 事件:顺丰笔试 知识点总结 快排 霍尔排序(快排) ...
- 剑指Offer——京东校招笔试题+知识点总结
剑指Offer--京东校招笔试题+知识点总结 笔试感言 经过一系列的笔试,发觉自己的基础知识还是比较薄弱的,尤其是数据结构和网络,还有操作系统.工作量还是很大的.做到精确制导的好方法就是在网上刷题,包 ...
- 剑指Offer——CVTE校招笔试题+知识点总结(Java岗)
剑指Offer(Java岗)--CVTE校招笔试题+知识点总结 2016.9.3 19:00参加CVTE笔试,笔试内容如下: 需要掌握的知识:Linux基本命令.网络协议.数据库.数据结构. 选择题 ...
- 《剑指Offer》各面试题总结
目录 前言 面试题4 二维数组的查找 面试题5:替换空格 面试题6:从尾到头打印链表 面试题7:重建二叉树 面试题8:二叉树的下一个节点 面试题9:用两个栈实现队列 面试题10:斐波那契数列 面试题1 ...
- 剑指offer代码 vs2013执行
方法: 代码文件夹名称为:CodingInterviewChinese2-master 1. 用vs2013加载解决方案 .sln文件 2. 一个解决方案下面有多个项目,通过右键解决方案->属性 ...
- 【剑指Offer面试题】九度OJ1384:二维数组中的查找
下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> ...
随机推荐
- 单元测试框架 unittest 的运行方法if __name__ == '__main__': unittest.main()
1. if __name__ == '__main__': unittest.main()2. 测试用例实例根据测试的特点分组在一起. unittest为此提供了一个机制:测试套件由unittest' ...
- JS中的循环---最全的循环总结
在讲循环的之前,先知道一下循环结构的执行步骤 1.声明循环变量: 2.判断循环条件; 3.执行循环体操作: 4.更新循环变量: 5.然后循环执行2-4,直到条件不成立,跳出循环. 1while循环 v ...
- 零基础如何迅速学习HTML5?新手小白学习web前端H5自白!
很多的人在毕业之后才发现原来学的专业不是自己想做的工作,或者专业对口的工作待遇让人觉得并不满意,于是很多人选择培训机构学新的一门技能转换行业.IT行业的web前端H5受到很多学员的青睐.那么学习web ...
- 页面第一次加载,JS没有效果,刷新一下就好了
问题详述:页面跳转的时候,第一个第二个页面都没有问题,跳到第三个页面,JS脚本没有起作用,刷新一下就好了. 1.猜测:第一个页面和第二个页面的JS,会对第三个页面产生影响,(因为之前没有这个问题,只改 ...
- Delphi工程版本号修改工具
自动修改某目录下符合条件的Delphi工程(dproj)版本号, 支持命令行调用支持通配符忽略文件 -p [Path] 在[Path]路径下查询所有dproj文件(可以为空, 默认路径为程序当前路径) ...
- [转载] Tomcat架构分析
转载自http://gearever.iteye.com/category/223001
- java equals 和 == 的区别
)1. == 可以用来比较基本类型以及引用类型.在基本类型中 == 比较的是两个变量的值是否相等.在引用类型中,== 比较的是两个对象的内存地址是否相等. )2. equals 只能用来比较引用类型. ...
- Asp.Net MVC 捆绑(Bundle)
Asp.Net MVC 捆绑(Bundle) 大多数浏览器会对同一域名的请求限制请求数量,一般是在8个以内.每次最多可以同时请求8个,要是资源多于8个,那么剩下的就要排队等待请求了.所以为了提高首次加 ...
- C语言之随机数
#include<stdio.h>#include<stdlib.h>#include<time.h>int main(){ srand(time(0)); int ...
- C++反汇编第二讲,不同作用域下的构造和析构的识别
C++反汇编第二讲,不同作用域下的构造和析构的识别 目录大纲: 1.全局(静态)对象的识别,(全局静态全局一样的,都是编译期间检查,所以当做全局对象看即可.) 1.1 探究本质,理解构造和析构的生成, ...