平衡二叉树 java
来源:互联网 发布:淘宝怎么分享不了 编辑:程序博客网 时间:2024/06/04 13:43
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
思路:
1、重复遍历结点
参考上一题求二叉树的深度,先求出根结点的左右子树的深度,然后判断它们的深度相差不超过1,如果否,则不是一棵二叉树;如果是,再用同样的方法分别判断左子树和右子树是否为平衡二叉树,如果都是,则这就是一棵平衡二叉树。
但上面的方法在判断子树是否为平衡二叉树时,会重复遍历树的结点,不断地求子树的深度,所以效率不高。
2、遍历一遍结点
我们在遍历结点的同时记录下该结点的深度,这样就可以避免了重复访问。
public boolean IsBalanced_Solution(TreeNode root) {if (root == null) {return true;}int leftDepth = TreeDepth(root.left);int rightDepth = TreeDepth(root.right);int diff = leftDepth - rightDepth;if (diff > 1 || diff < -1)return false;return IsBalanced_Solution(root.left)&& IsBalanced_Solution(root.right);}private int TreeDepth(TreeNode root) {if (root == null) {return 0;}int leftDepth = TreeDepth(root.left);int rightDepth = TreeDepth(root.right);return leftDepth > rightDepth ? (leftDepth + 1) : (rightDepth + 1);}
方法2:
//后续遍历时,遍历到一个节点,其左右子树已经遍历 依次自底向上判断,每个节点只需要遍历一次
private boolean isBalanced = true;/** * 后续遍历时,遍历到一个节点,其左右子树已经遍历 依次自底向上判断,每个节点只需要遍历一次 * * @param root * @return */public boolean IsBalanced_Solution1(TreeNode root) {getDepth(root);return isBalanced;}public int getDepth(TreeNode root) {if (root == null)return 0;int left = getDepth(root.left);int right = getDepth(root.right);if (Math.abs(left - right) > 1) {isBalanced = false;}return right > left ? right + 1 : left + 1;}
0 0
- 平衡二叉树 java
- 平衡二叉树-Java
- 平衡二叉树 java
- java --平衡二叉树实现
- java排序--平衡二叉树
- 二叉树平衡检查(Java)
- 二叉平衡树(Java)
- JAVA二叉树平衡检测
- java实现二叉平衡树
- 平衡二叉树Java实现
- 平衡二叉树java实现
- Java数据结构----树--平衡二叉树
- java实现平衡二叉树(详细分析)
- 平衡二叉树的java实现
- java实现平衡二叉树的建立
- 平衡二叉树的java实现
- 判断二叉树是否平衡java
- 【Java】检查二叉树是否平衡。
- 《B/S之学习开始》
- Java 回调函数(传统方法和lambda方法)-一个例子秒懂
- _mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':问题的解决
- dinic模板
- docker 基本命令总结(一)
- 平衡二叉树 java
- 算法竞赛入门经典2.5 2-5分数化小数
- 【java】:java中关于String,各种集合的方法的练习笔记
- 拓扑排序以及关键路径
- Android基础——Activity之间传递参数
- 山东理工OJ 1162 C语言实验——保留字母
- Java和SQL中一些基本的操作
- 作业
- office word插件开发1