//判断一颗二叉树是否是平衡二叉树
public class AvlTree{
//二叉树节点的定义
public static class Node{
public int value;
public Node left;
public Node right;
public Node(int data)
{
this.value=data;
}
}
//判断一颗二叉树是否为平衡二叉树(利用二叉树的后序遍历)
public static boolean isAVL(Node head)
{
boolean[]res=new boolean[1];
res[0]=true;
getHeight(head,1,res);
return res[0];
}
//递归调用获得子树的高度和是否为平衡二叉树
public static int getHeight(Node head,int level,boolean[]res)
{
if(head==null)
{
return level;
}
//左子树高度
int lH=getHeight(head.left,level+1,res);
if(!res[0])
{
return level;
}
//右子树高度
int rH=getHeight(head.right,level+1,res);
if(!res[0])
{
return level;
}
//左右子树高度差
if(Math.abs(lH-rH)>1)
{
res[0]=false;
}
return Math.max(lH,rH);
}
public static void main(String[] args)
{
/**
1
2 3
4 5 6 7
*/
Node head = new Node(1);
head.left = new Node(2);
head.right = new Node(3);
head.left.left = new Node(4);
head.left.right = new Node(5);
head.right.left = new Node(6);
head.right.right = new Node(7);
/**
1
2
4
*/
Node node=new Node(1);
node.left=new Node(2);
node.left.left=new Node(4);
//node.right=new Node(3);
System.out.println(isAVL(head));
System.out.println(isAVL(node));
}
}
判断一颗二叉树是否是平衡二叉树
最新推荐文章于 2024-07-22 08:34:33 发布