刷题专栏(八):平衡二叉树

简介: 刷题专栏(八):平衡二叉树

前言

最近要和二叉树死磕到底了,必须把二叉树相关数据结构的题目全做完才行。

今天的这一道《平衡二叉树》,虽然和昨天的那一道有序数组转平衡二叉树的题目不一样,但是本质上的结构是一样的。

昨天的那道题是转换为平衡的二叉树,今天的这道题是提供一个二叉树让你判断是不是平衡的二叉树。

image.png

算法题:平衡二叉树

昨天我们处理的那一道转换平衡二叉树,是根据二分法和递归来处理的,那这一道题又怎么解决呢?

按照之前总结的规律,逢二叉树,基本都会用到递归;那么看一下这道题是不是也要用递归呢?

看来是要用的,因为要查询到所有的分支才行。

那么二叉树怎么才能算作是平衡二叉树呢?那自然是左右分支的层数一样,或者是差值为一的才能算作是平衡二叉树。

这个时候就面临一个选择,是从根节点开始一层一层的递归遍历,最后得到结果。

还有就是从最底层节点开始往根节点算起,这个时候中间可能已经判断出结果来了,就可以提前终止调递归循环。

代码展示

我们这里采用了从底层节点到根部节点的检索方式,代码如下所示:

public boolean isBalanced(TreeNode root) {
    return a(root) >= 0;
}
public int a(TreeNode root) {
    if (root == null) {
        return 0;
    }
    int leftHeight = a(root.left);
    int rightHeight = a(root.right);
    if (leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight - rightHeight) > 1) {
        return -1;
    } else {
        return Math.max(leftHeight, rightHeight) + 1;
    }
}

执行结果:

结果不是很理想,大家可以尝试其他方式。

image.png

总结

今天是二叉树的第三道题了,明天我们接着看二叉树,欢迎大家关注刷题专栏。

目录
相关文章
|
6月前
剑指offer05刷题打卡
剑指offer05刷题打卡
46 1
|
6月前
剑指offer58 - 2刷题打卡
剑指offer58 - 2刷题打卡
52 0
|
6月前
|
算法 索引
leetcode654最大二叉树刷题打卡
leetcode654最大二叉树刷题打卡
54 0
|
6月前
|
算法 机器人
剑指offer刷题指南
剑指offer刷题指南
82 0
|
3月前
|
存储 算法
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
文章深入探讨了二叉树的层序遍历方法,并展示了如何通过队列实现层序遍历的算法逻辑,同时指出掌握层序遍历技巧可以帮助解决LeetCode上的多道相关题目。
二叉树进阶-学会层序遍历助你一次刷完leetcode10道题
|
6月前
|
算法
刷题专栏(十):二叉树的前序遍历
刷题专栏(十):二叉树的前序遍历
55 0
|
6月前
|
算法
刷题专栏(六):二叉树的最大深度
刷题专栏(六):二叉树的最大深度
55 0
|
6月前
|
存储 算法
刷题专栏(十一):二叉树的后序遍历
刷题专栏(十一):二叉树的后序遍历
57 0
|
6月前
|
存储 算法 C++
六六力扣刷题二叉树之基础
六六力扣刷题二叉树之基础
81 0
|
算法
牛客网《剑指offer》专栏刷题练习之二叉树合集
牛客网《剑指offer》专栏刷题练习之二叉树合集
90 1