如何判断一个二叉树是否为平衡二叉树。
来源:互联网 发布:网络销售卖红酒好不好 编辑:程序博客网 时间:2024/05/03 05:55
二叉树的知识
先回顾一下一个经典的数据结构,二叉树。
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
平衡二叉树:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
下面我们先用java定义一个树的结构。
public class TreeNode { private int val; private TreeNode left,right; public TreeNode(val) { this.val=val; this.left=this.right=null; } }
那么如何判断一个二叉树是否平衡二叉树?
我们可以遍历每一个节点,然后计算出它的左子树,和右子树的深度,然后判断。
//计算树的高度public int getTreeHeight(TreeNode root) { if(root==null)//为空,返回0 { return 0; } int height=1; if(root.left!=null)//左子树不为空则递归调用计算出左子树的深度 { height = 1+getTreeHeight(root.left); } if(root.right!=null)//右子树不为空则递归调用计算出右子树的深度 { int h = 1+getTreeHeight(root.right); height = height>h?height:h; //比较左右子树得出树的深度 } return height; } //判断是否为平衡二叉树 public boolean isBalanced(TreeNode root) { // write your code here if(root==null) { return true; } int left=getTreeHeight(root.left); int right=getTreeHeight(root.right); int diff=left-right; if(diff>1||diff<-1)//相差高度绝对值不大于1则为平衡二叉树 { return false; } //必须判断每个节点 return isBalanced(root.left)&&isBalanced(root.right); }
使用上面的方法,显而易见的是效率比较低,因为每个节点都要被遍历多次。有兴趣的可以尝试用后序遍历来判断。
0 0
- 如何判断一个二叉树是否为平衡二叉树。
- 【二叉树】判断二叉树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断二叉树是否为平衡树
- 判断树是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断二差树是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断是否为平衡二叉树
- 判断一棵树是否为平衡二叉树
- Android开发:shape和selector和layer-list的(详细说明)
- 树的子结构
- 关于ScrollView嵌套ListView的一些问题
- Spark Streaming和Storm的区别和联系
- 免费、高性能的人脸检测库
- 如何判断一个二叉树是否为平衡二叉树。
- json字符串转化为复杂的java对象问题解决分享
- Hadoop和Spark的联系和区别
- 基于i2c子系统的驱动分析
- Spark概述
- typedef的用法
- 欢迎使用CSDN-markdown编辑器
- 通过设置Weblogic设置线程数提高系统并发
- var 全局变量 局部变量