高度平衡的二叉树

/**
* 题目
* 给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:
* 一棵二叉树中每个节点的两个子树的深度相差不会超过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]+))?)$");
    }
}
    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/qq_17525769/article/details/54237433
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞