• 检查二叉树是否平衡


    惊恐实现一个函数,检查二叉树是否平衡。在这个问题中。平衡树的定义例如以下:随意一个结点。其两棵子树的高度差不超过1.

                  直接递归訪问整棵树,计算每一个结点两棵子树的高度。

    public static int getHeight(TreeNode root)
    {
    if(root == null) return 0;//终止条件
    return Math.max(getHeight(root.left), getHeight(root.right))+1;
    }
    public static boolean isBalanced(TreeNode root)
    {
    if(root == null) return true;//终止条件
    int heightDiff=getHeight(root.left)-getHeight(root.right);
    if(Math.abs(heightDiff)>1)
    return false;
    else//递归
    {
    return isBalanced(root.left) && isBalanced(root.right); 

    }
    }


    public static int checkHeight(TreeNode root )
    {
    if(root == null)
    {
    return 0;//高度为0
    }
    //检查左子树是否平衡
    int leftHeight=checkHeight(root.left);
    if(leftHeight==-1)
    {
    return -1;
    }
    //检查右子树是否平衡
    int rightHeight=checkHeight(root.right);
    if(rightHeight == -1)
    {
    return -1;
    }

    /*检查当前结点是否平衡*/

    int heightDiff=leftHeight-rightHeight;

    if(Math.abs(heightDiff)>1)

          return -1;

    else
    {
    //返回高度
         return Math.max(leftHeight, rightHeight)+1;
    }
    }

    public static boolean isBalanced(TreeNode root)
    {
    if(checkHeight(root)== -1)
    {
    return false;
    }
    else
    {
    return true;
    }
    }

    这段代码须要O(N)的时间和O(H)的空间,H是树的高度。

  • 相关阅读:
    docker常规操作——启动、停止、重启容器实例
    docker同时删除多个容器
    ubuntu中使用docker部署.netcore2.1
    .NET中RabbitMQ的使用
    Java开发环境Jave EE 和 jdk 下载
    WebApi用户登录验证及服务器端用户状态存取
    MVC中使用Ninject依赖注入
    起步:SpringBoot
    ML-对偶(Duality)问题 KKT 条件
    pandas 之 多层索引
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7089904.html
Copyright © 2020-2023  润新知