博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode之Balanced Binary Tree 平衡二叉树
阅读量:6702 次
发布时间:2019-06-25

本文共 1527 字,大约阅读时间需要 5 分钟。

判定一棵二叉树是不是二叉平衡树。

链接:

题目描述:

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

给出一棵二叉树,判断它是不是平衡二叉树。

平衡二叉树被定义每个节点的两个子树高度差不超过1。

这道题目比较简单,

一棵树是不是平衡二叉树,可以输入一个结点,计算它的两棵子树的高度差,然后与1比较,递归进行这个操作就可以完成判定。

回顾一下二叉树的概念,平衡二叉树基于二叉查找树(Binary Search Tree)

二叉查找树或者是一棵空树;
或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
二叉查找树是插入,排序,查找的平均时间复杂度都是O(Log(n)),最差情况是O(n),
二叉树的平衡因子是该结点的左子树的深度减去它的右子树的深度,平衡二叉树的BF因子绝对为1。

 

下面用Java完成Solution,注意空树的情况:

public class BalancedBinaryTreeSolution {    /**     * 访问局部内部类必须先有外部类对象,此处必须用Static修饰     *///    public static class TreeNode {//           int val;//           TreeNode left;//           TreeNode right;//           TreeNode(int x){ val = x;}//    }        //OJ支持JDK的Math函数    public boolean isBalanced(TreeNode root) {        //注意空树的情况        if(root == null)            return true;                int leftDepth=getDepth(root.left);        int rightDepth=getDepth(root.right);        int altitude=rightDepth-leftDepth;        //注意只有一个顶点的情况        if(Math.abs(altitude)>1)            return false;                    else            //递归比较            return isBalanced(root.left) && isBalanced(root.right);    }        private int getDepth(TreeNode node){        if(node == null)            return 0;        //递归求深度        return  1+Math.max(getDepth(node.left), getDepth(node.right));    }}

 

转载地址:http://wigoo.baihongyu.com/

你可能感兴趣的文章
[转]Raft [Why Not Paxos]
查看>>
[翻译] GCDiscreetNotificationView
查看>>
PreparedStatement的用法
查看>>
java调用shell脚本,并获得结果集的例子
查看>>
MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013
查看>>
jstat命令(Java Virtual Machine Statistics Monitoring Tool)
查看>>
关于 initWithNibName 和 loadNibNamed 的区别和联系
查看>>
ANDROID_SDK_HOME设置
查看>>
Linux下Python科学计算包numpy和SciPy的安装
查看>>
Deploying Cloud Foundry on OpenStack Juno and XenServer (Part II)
查看>>
linux光盘、U盘的挂载与卸载
查看>>
xheditor
查看>>
Android 上SuperUser获取ROOT权限原理解析
查看>>
把notepad++设置为系统全局文本默认打开应用
查看>>
基于用户信任和商品相似度的随机游走推荐模型
查看>>
Android之WebViewClient与WebChromeClient的区别
查看>>
学习淘宝指数有感
查看>>
Shell获取文件的文件名和扩展名的例子
查看>>
[转]Linux动态库的种种要点
查看>>
AngularJS快速入门指南11:事件
查看>>