如何判断一个二叉树是否为平衡二叉树。
2016-09-08 09:10
309 查看
二叉树的知识
先回顾一下一个经典的数据结构,二叉树。二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(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); }
使用上面的方法,显而易见的是效率比较低,因为每个节点都要被遍历多次。有兴趣的可以尝试用后序遍历来判断。
相关文章推荐
- 如何判断一棵二叉树是否是平衡二叉树(AVL)
- 判断一个二叉树是否是平衡二叉树
- 判断一个二叉树是否是平衡二叉树
- .如何判断一棵二叉树是否是平衡二叉树
- LeetCode(Balanced Binary Tree ) 判断一个二叉树是否为平衡二叉树
- 如何判断一个二叉树是否为另一个二叉树的子树
- 判断一个二叉树是否是平衡二叉树
- 如何判断一棵二叉树是否是平衡二叉树<转载>
- 【算法题】如何判断一个二叉树是平衡二叉树
- 如何判断一个二叉树是否是二叉查找树
- 2个二叉树A、B,树的每个节点上都有一个整数值。如何判断A与B是否其中一个是另一个的子树?
- 数据结构之如何判断一棵二叉树是否是平衡二叉树(AVL树)
- day12之判断一棵二叉树是否是平衡二叉树+求一颗二叉树的镜像+判断一个数在二维数组中是否存在
- 如何判断一个二叉树是否为另一二叉树子树u
- 如何只遍历一次判断一棵二叉树是否为平衡二叉树
- 判断一个二叉树是否是平衡二叉树 Cracking the coding interview 4.1
- 判断一个二叉树是否是平衡二叉树(AVL)
- 求一个二叉树的深度以及如何判断一个二叉树是一个平衡二叉树
- 如何判断一个数是否是完全平方数
- 如何判断一个数组是否按顺序排好了