您的位置:首页 > 编程语言 > Java开发

高度平衡的二叉树

2017-01-08 22:19 344 查看
/**

* 题目

* 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:

* 一棵二叉树中每个节点的两个子树的深度相差不会超过1。

* 例二叉树:先序 3 9 # # 2 1 # # 7 # # 是平衡二叉树

* 先序 3 # 2 1 # # 7 # # 不是平衡二叉树

* 分析:

* 首先求深度,然后判断深度相差是否超过1,注意递归的使用

*/

import java.util.Scanner;

public class n6BalenceTree {

public static void main(String[] args) {
// TODO Auto-generated method stub
TreeNode treeNode=createTree();
PreTraverse(treeNode);
System.out.println(isBalenced(treeNode));

}
//判断是否平衡
public static  boolean isBalenced(TreeNode root){
if(root==null)
return true;
int left=depth(root.left);
int right=depth(root.right);
if(Math.abs(left-right)<=1){
return isBalenced(root.left)&&isBalenced(root.right);
}else
return false;
}
//计算深度
public static int depth(TreeNode root){
if(root==null){
return 0;
}
int left=depth(root.left);
int right=depth(root.right);
return Math.max(left, right)+1;
}
//用先序递归建数
public static TreeNode createTree(){
Scanner input=new Scanner(System.in);
String str=input.nextLine();// 输入一个数字
TreeNode node=null;
if(isNum(str)){//判断是否是数字,则用这个数字为根创建一个结点
node=new TreeNode(Integer.valueOf(str).intValue());
node.left=createTree();
node.right=createTree();
return node;
}
return node;

}
//先序遍历
public static void PreTraverse(TreeNode root){
if(root!=null){
System.out.printf("%4d",root.val);
PreTraverse(root.left);
PreTraverse(root.right);
}else{
System.out.printf("%2c",'#');
}
}

public static boolean isNum(String str){
return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?([.]([0-9]+))?)$");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息