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

假设某二叉树中随意结点的左右子树的高度相差不超过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——京东校招笔试题+知识点总结

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

  2. 《剑指offer》所有面试题及其参考代码

    点击上方蓝字关注我,我们一起学编程 有任何疑问或者想看的内容,欢迎私信 微信搜索<编程笔记本>(codingbook2020),获取更多干活. 剑指 offer 面试题目录 文章目录 剑指 ...

  3. 剑指offer 代码实现 C++

    临近找工作的季节, 赶紧把牛课网上的剑指offer部分的代码重新码了一遍 http://www.nowcoder.com/ta/coding-interviews?page=1 将代码托管到了 csd ...

  4. 剑指offer第二版——面试题9(java)

    面试题9:用两个栈实现队列 题目描述:  用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能. ...

  5. python剑指offer面试题_剑指Offer(Python语言)面试题38

    面试题38:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列.例如,输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca和cba. # - ...

  6. 剑指Offer——顺丰笔试题+知识点总结

    文章目录 一.情景回顾 二.知识点总结 2.1 快排 2.1.1 霍尔排序(快排) 2.1.2 哈夫曼树带权路径长度 2.1.3 vector,map,set用什么数据结构存储 2.1.4 码上示例 ...

  7. 剑指offer 回溯法 面试题12 矩阵中的路径 面试题13 机器人的运动范围

    题目12 bool has_path_core(char *matrix, int rows, int cols, int row, int col, string a, int &pathl ...

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

    文章目录 一.最有价值的的委托信息 二.编程题2 三.选举游戏 四.生日礼物 五.分糖果 一.最有价值的的委托信息 题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息. n.s.B ...

  9. 《剑指offer》题目说明

    剑指offer推荐刷题地址: Leetcode: https://leetcode-cn.com/problemset/lcof (官方授权) 牛客网:https://www.nowcoder.com ...

最新文章

  1. GitHub添加SSH keys报错Key is invalid. It must begin with 'ssh-ed25519', 'ssh-rsa', 'ssh-dss', 'ecdsa-sha
  2. 深入理解 Session 与 Cookie
  3. 【论文相关】 技术性论文结构剖析
  4. Gartner发布2022年七大安全和风险管理趋势
  5. 什么软件测试显示器响应时间准,自己动手测试液晶显示器响应时间
  6. c++ array容器 传参_C++ 顺序容器基础知识总结
  7. Atitit orm 之道 艾龙著 1. 一、ORM的由来 1 2. ORM的组成:      2 3.  常见的ORM框架:      3 4. 、ORM与数据持久化的关系 3 5. Atitit
  8. python闹钟界面程序_利用QT写一个极简单的图形化Python闹钟程序
  9. 微信浏览器-公众号,实现地图定位
  10. 【Markdown 数学公式】markdown常用公式写法
  11. 项目一——电子通讯录
  12. 让电视走向高端化,创维能否继续领跑显示行业?
  13. 我为什么要离开传智再去创业?
  14. 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
  15. 海外游戏广告应该怎么做
  16. 腾讯企业邮箱十大优势特点 (浅谈腾讯企业邮箱优点之一二三)
  17. HTML5 javascript实现音乐播放器
  18. 推动遗留系统现代化革新的三种方式
  19. python-对象类型
  20. 软件综合实践专题--结对编程

热门文章

  1. poj_1442 Treap
  2. 类似新浪微博和google图片的HTML5实现图片拖拽上传功能
  3. 我的联想C467鲁大师检查配置
  4. 从数据到代码——通过代码生成机制实现强类型编程[上篇]
  5. Windows ×××服务器配置6-启用L2TP方式CA模式访问①
  6. ubuntu drbd双机互备
  7. 犯罪分子正在将合法的云监控工具用作后门
  8. 我发现了3572个漏洞 今天又是崭新的一天
  9. 微软 Edge 浏览器被指共享隐私遥测数据
  10. 怎样快速运用KeyShot 6 鼠标视图操作