给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: > 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 **示例 1:** 给定二叉树 `[3,9,20,null,null,15,7]` 3 / \ 9 20 / \ 15 7 返回 `true` 。 **示例 2:** 给定二叉树 `[1,2,2,3,3,null,null,4,4]` 1 / \ 2 2 / \ 3 3 / \ 4 4 返回 `false` 。 附赠leetcode地址:[leetcode](https://leetcode-cn.com/problems/binary-tree-inorder-traversal/solution/javascriptjie-zhong-xu-bian-li-er-cha-shu-by-user7/)
Activity
plane-hjh commentedon May 19, 2020
思路:后序遍历,使用递归计算节点的高度
比较左右子树的深度,若差值大于1 则返回一个标记 -1表示当前子树不平衡
左右子树有一个不是平衡的,或左右子树差值大于1,则整课树不平衡
若左右子树平衡,返回当前树的深度(左右子树的深度最大值+1)
luweiCN commentedon May 19, 2020
13001920223 commentedon May 19, 2020
解题思路
· 定义height方法获取二叉树最大深度
· 获取子树高度,如果差值大于一则不是平衡二叉树返回false
· 递归调用直到遍历完成
sisterAn commentedon May 19, 2020
解答一:自顶向下(暴力法)
解题思路: 自顶向下的比较每个节点的左右子树的最大高度差,如果二叉树中每个节点的左右子树最大高度差小于等于
1,即每个子树都平衡时,此时二叉树才是平衡二叉树代码实现:
复杂度分析:
depth存在大量冗余操作解答二:自底向上(优化)
解题思路: 利用后续遍历二叉树(左右根),从底至顶返回子树最大高度,判定每个子树是不是平衡树 ,如果平衡,则使用它们的高度判断父节点是否平衡,并计算父节点的高度,如果不平衡,返回
-1。遍历比较二叉树每个节点 的左右子树深度:
1则返回一个标记-1,表示当前子树不平衡1,则二叉树不平衡+1)代码实现:
复杂度分析:
leetcode
AnranS commentedon Nov 20, 2020