剑指offer36--二叉树的深度
2016-06-24 21:26
316 查看
一、题目
最简单的方式就是使用递归的方式来遍历二叉树,在递归的处理函数中逐渐增加二叉树的深度
平衡二叉树的思想和上面的二叉树的思想其实差不多,不过平衡二叉树是比较left和right的差值
题目一:输入一棵二叉树的根结点,求该树的深度。从根结点到叶子点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
二、平衡二叉树
输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1 ,那么它就是一棵平衡二叉树。
三、思想
最简单的方式就是使用递归的方式来遍历二叉树,在递归的处理函数中逐渐增加二叉树的深度平衡二叉树的思想和上面的二叉树的思想其实差不多,不过平衡二叉树是比较left和right的差值
四、程序
package 剑指offer; /*题目一:输入一棵二叉树的根结点,求该树的深度。从根结点到叶子点依次经过的结点 *(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 */ public class Test39 { public static int TreeDeepth(BinaryNode root){ if(root == null){ return 0; } int left = TreeDeepth(root.left); int right = TreeDeepth(root.right); if(left > right){ return left + 1; }else{ return right + 1; } } // 判断一个数是否是平衡二叉树 public static boolean isBalanced(BinaryNode root){ if(root == null){ return true; } int left = TreeDeepth(root.left); int right = TreeDeepth(root.right); int differ = left - right; if(differ > 1 || differ < -1){ return false; } return isBalanced(root.left) && isBalanced(root.right); } public static boolean isBalanced2(BinaryNode root){ if(root == null){ return true; } int left = TreeDeepth(root.left); int right = TreeDeepth(root.right); int differ = left - right; if(differ > 1 || differ < -1){ return false; } return isBalanced(root.left) && isBalanced(root.right); } public static void main(String args[]){ // 完全二叉树 // 1 // / \ // 2 3 // /\ / \ // 4 5 6 7 BinaryNode n1 = new BinaryNode(1); BinaryNode n2 = new BinaryNode(1); BinaryNode n3 = new BinaryNode(1); BinaryNode n4 = new BinaryNode(1); BinaryNode n5 = new BinaryNode(1); BinaryNode n6 = new BinaryNode(1); BinaryNode n7 = new BinaryNode(1); n1.left = n2; n1.right = n3; n2.left = n4; n2.right = n5; n3.left = n6; n3.right = n7; System.out.println(isBalanced(n1)); //System.out.println(isBalanced2(n1)); System.out.println("----------------"); } } class BinaryNode{ int value; BinaryNode left; BinaryNode right; public BinaryNode(int value){ this.value = value; } }
相关文章推荐
- 也许是最简洁好用的timeago.js库了
- JavaScript基础
- 动画 方块旋转
- ASP.NET MVC Bootstrap 个人博客站 www.zynblog.com
- ReactJS学习系列课程(props 组件属性)
- iShare.js分享插件
- HTML速查列表
- 浅谈StringBuffer类初始容量及扩容
- iShare.js分享插件
- 不会全排列算法(Javascript实现),我教你呀!
- ReactJS学习系列课程(JSX语法)
- React学习资料
- css3+js+html实现模拟时钟
- CSS权威指南-属性选择器
- ReactJS学习系列课程附加2(React虚拟DOM分析)
- Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串
- 《React:引领未来的用户界面开发框架》— —自编教程源码
- jQuery总结
- 基于Bootstrap的jQuery开关按钮插件
- Node.js中,使用cluster创建子进程