剑指 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:名企面试官精讲典型编程题> ...
随机推荐
- HTML5与搜索引擎优化[转载]
原文:http://lusongsong.com/reed/398.html 我觉得HTML5的兴起完全是因为iPhone和iPad,自从Adobe停止开发flash.Android4.0不支持fla ...
- HTTP响应头信息(Response Headers)与请求头信息(Request Headers)
打开了电影天堂网站,我们鼠标右键“检查”->打开“开发者工具”->选择“Network”. 刷新网页,选择某一文件点击(此处我是点击db.css),可以观察到Response Header ...
- ASP.NET没有魔法——ASP.NET MVC Controller的实例化与执行
上一章节中对路由的注册和匹配过程进行了介绍,知道了MVC的Http请求最终是交由MvcHandler处理的,而其处理过程就是对Controller的创建.执行和释放. 本章将从以下几点进一步对上面提到 ...
- firefox被hao123绑架的解决办法
1.在地址栏里输入"about:support" 2.单击配置文件夹后的"打开文件夹"按钮. 3.在弹出来的文件夹中找到那个叫做"user.js&qu ...
- SDRAM操作说明
SDRAM是做嵌入式系统中,常用是的缓存数据的器件.基本概念如下(注意区分几个主要常见存储器之间的差异): SDRAM(Synchronous Dynamic Random Access Memory ...
- 在网页标题栏title加入图标?
方法一:制作一个ico格式的图片,将图片命名为favicon.ico,像素大小为16*16,所使用的颜色不得超过16色,然后再把favicon.ico放到网站的根目录下就行了.这样的话浏览器会不停的搜 ...
- CTF线下攻防赛
SSH登陆 两三个人进行分工,一个粗略的看下web,有登陆口的话,就需要修改密码,将情况反馈给队友,让登陆ssh的小伙伴进行密码的修改,改成炒鸡复杂.然后将Web目录下载下来,上WAF.文件监控.端口 ...
- 熟悉Objective—C
1.oc使用消息结构而非函数调用 使用消息结构的语言,运行时所应执行的代码由运行环境来决定,而是用函数调用的语言,则由编译器决定.函数调用:如果调用的函数是多态的,那么在运行时就要按照“虚方法表”来查 ...
- Python入门 - 生成随机数
生成随机数是编程中经常用到的功能,下面讲几种常用的随机函数randint,uniform, randrange: 一.生成随机整数 randint import random a = random. ...
- C#检测获取移动硬盘盘符
最近做一个小工具, C# 对 移动硬盘的检测, var arr = DriveInfo.GetDrives(); 得出的所有磁盘,发现对于移动硬盘,DriveType 不是 Removable 类型 ...