本人电子系,只为一学生。心喜计算机,小编以怡情。
平衡二叉树
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
思路:
1、写一个求树的高度的子程序
2、层次遍历,每一个点都判断一下左子树高度与右子树高度之差
static public boolean isBalanced(TreeNode root) {
// write your code here
if(root==null) return true;
//用队列的方法层次遍历树的每一个结点
Queue<TreeNode> que=new LinkedList<>();
que.offer(root);
while(!que.isEmpty())
{
TreeNode temp=que.poll();
//求左子树高度、右子树高度
int a=getsub(temp.left);
int b=getsub(temp.right);
//两者相减,判断是否平衡
if(Math.abs(a-b)>1) return false;
//将左节点和右节点放入
if(temp.left!=null)
que.offer(temp.left);
if(temp.right!=null)
que.offer(temp.right);
}
return true;//都遍历完了都无false就是true
}
//递归求树的高度
static int getsub(TreeNode root)
{
if(root==null) return 0;
int a=getsub(root.left);
int b=getsub(root.right);
return Math.max(a, b)+1;
}