《程序员面试金典》
来源:互联网 发布:苹果电脑自带办公软件 编辑:程序博客网 时间:2024/04/27 23:36
4.1 检查二叉树是否平衡
- 代码实现
// 获取二叉树的树高度,判断二叉树是否平衡class TreeNode { public int val = 0; public TreeNode left = null; public TreeNode right = null;}public class Solution { // 获取树高度,用递归的方法:左、右子树的最大高度加一 public static int getHeight(TreeNode node) { if (node == null) // 递归结束条件 return 0; else // 左右子树的最大高度加一 return Math.max(getHeight(node.left), getHeight(node.right))+1; } // 递归判断树是否平衡:先判断当前节点是否平衡,平衡时再判断左右子树是否平衡 public static boolean isBalance(TreeNode node) { if (node == null) // 递归结束条件 return true; // 获取左右子树高度,判断当前节点是否平衡 int left = getHeight(node.left); int right = getHeight(node.right); if (Math.abs(left - right) > 1) // 递归结束条件 return false; else return isBalance(node.left) && isBalance(node.right); } // 改进方法,从根节点递归向下检查每棵子树的高度 public static boolean isBalance2(TreeNode root) { if (checkHeight(root) == -1) return false; else return true; } public static int checkHeight(TreeNode node) { if (node == null) return 0; // 获取左子树高度,并判断是否平衡 int leftHeight = checkHeight(node.left); if (leftHeight == -1) return -1; // 获取右子树高度,并判断是否平衡 int rightHeight = checkHeight(node.right); if (leftHeight == -1) return -1; // 检查当前节点是否平衡 if (Math.abs(leftHeight - rightHeight) > 1) return -1; else return Math.max(checkHeight(node.left), checkHeight(node.right)) + 1; }}
0 0
- 《程序员面试金典》
- 程序员面试金典:
- 程序员面试金典:
- 程序员面试金典:
- 程序员面试金典:
- 程序员面试金典
- 程序员面试金典
- 程序员面试金典 笔记
- 程序员面试金典目录
- 程序员面试金典8.1
- 程序员面试金典第四章 面试之前
- 程序员面试金典--面试31之像素设定
- 程序员面试金典--面试32之碰撞的蚂蚁
- 程序员面试金典--面试34之加法运算替代
- 《程序员面试金典》之压缩字符串
- 程序员面试金典-数组和字符串
- [程序员面试金典]1001.字符串变换
- 《程序员面试金典》--反转字符串
- Ubuntu下几个常用软件安装
- 岭回归、lasso、ElasticNet、正则化、L1、L2小结
- servlet表单处理使用GET()方法实例 及复选框
- 算法入门---java语言实现的并查集(Union-Find)小结
- EasyUI之分类Accordion
- 《程序员面试金典》
- web前端开发扫盲
- 【HBase调优】Hbase万亿级存储性能优化总结
- Unity IOS 消息推送
- Top 30 JavaScript Interview Questions And AnswersWeb Development Published: March 5, 2017 Meenaksh
- 操作系统实验一之进程的创建实验
- Android String 资源
- unity, 替换shader渲染(Rendering with Replaced Shaders)
- oracle子查询,分页查询 的运用