您的位置:首页 > 其它

判断一颗二叉树是否是平衡二叉树

2017-11-24 15:02 543 查看


//判断一颗二叉树是否是平衡二叉树
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));

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息