剑指offer系列之三十八:判断是否是平衡二叉树
2015-12-13 13:12
288 查看
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
所谓平衡二叉树就对某个结点来讲,其左子树的深度与右子树深度的绝对值不超过1。由于需要对每个节点进行判断,所以可以采用递归的思路进行解决。具体思路是:先求出根节点的左右子树的深度,并对两者进行判断,如果没有满足左右子树的深度的绝对值不超过1的条件,那么就不是平衡二叉树。下一步,自然就是分别对根节点的左右子树进行递归判断了,这样一直到叶子结点。整棵二叉树的所有节点都判断完毕,所以这个问题就解决了。下面是这种思路的实现代码(已被牛客AC):
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
所谓平衡二叉树就对某个结点来讲,其左子树的深度与右子树深度的绝对值不超过1。由于需要对每个节点进行判断,所以可以采用递归的思路进行解决。具体思路是:先求出根节点的左右子树的深度,并对两者进行判断,如果没有满足左右子树的深度的绝对值不超过1的条件,那么就不是平衡二叉树。下一步,自然就是分别对根节点的左右子树进行递归判断了,这样一直到叶子结点。整棵二叉树的所有节点都判断完毕,所以这个问题就解决了。下面是这种思路的实现代码(已被牛客AC):
package com.rhwayfun.offer; public class IsBiTreeBalanced { public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public boolean IsBalanced_Solution(TreeNode root) { if(root == null) return true; int leftLen = TreeDepth(root.left); int rightLen = TreeDepth(root.right); int lenDif = leftLen - rightLen; if(lenDif < -1 || lenDif > 1) return false; return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right); } private int TreeDepth(TreeNode root) { if(root == null) return 0; int leftLen = TreeDepth(root.left); int rightLen = TreeDepth(root.right); return leftLen > rightLen ? leftLen + 1 : rightLen + 1; } public static void main(String[] args) { } }
相关文章推荐
- bootstrap封装成seajs cmd模块
- 用jQuery在IFRAME里取得父窗口的某个元素的值
- Bootstrap HTML 5 文档类型
- node.js require() 源码解读
- 2015-12-12复习之OO CSS
- JavaScript 模块的循环加载实现方法
- Javascript实用方法二
- js数据类型检测方法(总结)
- javascript返回上一级(页)的方式
- JavaScript:验证input[type=‘text’]输入框动态数据
- Web前端技能
- CSS之box-shadow
- AngularJs实战(五)
- json中的值类型及输出对象的所有名称和对应的值
- js-window对象的方法和属性资料
- web前端之Html和Css应用中的细节问题
- javascript日期验证之输入日期大于等于当前日期
- JS+HTML5的Canvas画图模拟太阳系运转
- CSS-返回顶部代码
- POJ 2242|ZOJ 1090 The Circumference of the Circle