笔试面试算法经典--判断二叉树是否是平衡二叉树(Java)
来源:互联网 发布:隔热断桥铝合金 知乎 编辑:程序博客网 时间:2024/06/16 04:03
平衡二叉树(Balanced Binary Tree)又被称为AVL树,且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。如下面的三棵树:只有中间才是平衡二叉树。
解法:
思路1:从根节点开始,求出根的左右子树的高度,如果根的左右子树的高度差大于1,返回FALSE,否则递归的判断根的左子树和右子树是否满足条件。
class TreeNode{ int val; TreeNode left=null; TreeNode right=null; public TreeNode(int val) { this.val = val; }}public boolean IsBalanced_Solution(TreeNode root) { if(root==null) return true;//如果树为 null 返回 TRUE。否则判断根的左右子树的高度差的绝对值是否大于1,若大于1 则返回false。// 否则判断树的左右孩子是否是平衡二叉树,当两者都是平衡二叉树时返回TRUE,否则返回false. else if(Math.abs(TreeDepth(root.left)-TreeDepth(root.right))>1) return false; else return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right); } //求树的深度。 public int TreeDepth(TreeNode root) { if(root==null) return 0; //如果树为 null 返回0 否则返回左右孩子的最大值+1。 return Math.max(TreeDepth(root.left), TreeDepth(root.right))+1; }
思路2:上面的方法中,重复的计算子树的高度。可以用后序遍历,从下到上遍历如果子树中任一不满足条件返回 false,否则返回 true 这样每个节点的高度只会算一次。
public class IsBalancedTree { boolean isBalance=true; public boolean IsBalanced_Solution(TreeNode root) { TreeDepth1(root); return isBalance; //isBalance 会在 TreeDepth1(root)中赋值。 } public int TreeDepth1(TreeNode root) { if(root==null) return 0; int left=TreeDepth1(root.left); //左子树高度 int right=TreeDepth1(root.right); //右子树高度 if(Math.abs(left-right)>1) { isBalance=false; //只要有一个子树的左右子树的高度绝对值大于 1 isBalance=false } return Math.max(left, right)+1; }
0 0
- 笔试面试算法经典--判断二叉树是否是平衡二叉树(Java)
- 面试经典(15)--判定是否是平衡二叉树
- 【算法】判断二叉树是否是平衡二叉树
- [互联网面试笔试汇总C/C++-16] 判断一棵二叉树是否是平衡二叉树
- 判断二叉树是否是平衡树
- 判断二叉树是否是平衡树
- 判断二叉树是否是平衡树
- 判断一颗树是否是平衡二叉树
- 判断是否是平衡二叉树
- 判断一棵树是否是平衡二叉树
- 判断是否是平衡二叉树
- 判断二叉数是否是平衡树
- 判断是否是平衡二叉树
- Leetcode110 判断是否是平衡二叉树
- 判断一棵树是否是平衡二叉树
- 判断是否是平衡二叉树
- 判断是否是平衡二叉树
- 判断是否是平衡二叉树
- 线性判别分析LDA
- 小文件合并存储问题
- IP协议的相关技术
- Roman to Integer
- [C++基础]指针函数与函数指针<详细讲解>
- 笔试面试算法经典--判断二叉树是否是平衡二叉树(Java)
- 一种利用重链剖分优化一类树形动态规划空间复杂度的方法
- Jack-server出错:out of memory error,try increasing heap size
- Linux 下使用awk处理数据并写入数据库
- 排序算法之插入排序
- 不可重复读和幻读的一些区别
- 数组之sort Array中,找出给定数字出现的次数
- 初识.net界面程序(4)——数组排序和计算练习
- HDU 2546 饭卡