平衡二叉树

平衡二叉树的定义:
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,同时,平衡二叉树必定是二叉搜索树,反之则不一定.
问题1:
把一个升序的数组转换成平衡二叉树
对一个二叉搜索树进行中序遍历就可以得到一个升序的数组,那么反过来考虑,数组的中值即为root,然后数组分为左子树和右子树,继续进行递归即可得出结果.

class Solution(object):
    def sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if not nums:
            return None

        mid = len(nums) // 2

        root = TreeNode(nums[mid])
        root.left = self.sortedArrayToBST(nums[:mid])
        root.right = self.sortedArrayToBST(nums[mid+1:])

        return root

问题2:
给一个二叉树,判断是否是平衡树
首先写计算二叉树高度的函数
树的高度 = max(左子树高度,右子树高度)+1

def getHeight(self, root):
    if not root:
        return 0

    return 1 + max(self.getHeight(root.left), self.getHeight(root.right))

可以得到高度后对树递归求解每个节点的左右子树的高度差,如果有大于1的,则return False

class Solution(object):
    def isBalanced(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if not root:
            return True

        return abs(self.getHeight(root.left) - self.getHeight(root.right)) < 2 and self.isBalanced(root.left) and self.isBalanced(root.right)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据结构与算法--从平衡二叉树(AVL)到红黑树 上节学习了二叉查找树。算法的性能取决于树的形状,而树的形状取决于...
    sunhaiyu阅读 7,677评论 4 32
  • -二叉搜索树 查找问题:静态查找和动态查找,静态查找可以用二分查找-判定树,那么针对动态查找数据如何组织?(树的动...
    Spicy_Crayfish阅读 1,389评论 0 2
  • 查找树 平衡二叉树先是一颗查找树,所以先从查找树的性质讲起。 查找树的递归定义是,每个节点的左孩子值不大于它、右孩...
    0_0啊阅读 852评论 0 0
  • 定义 平衡二叉树,是对二叉搜索树的一种优化。 向二叉搜索树中插入元素时,不同的插入次序,将构造出不同结构的树。通俗...
    IAM四十二阅读 4,056评论 0 2
  • 1、概念 平衡二叉树又称AVL树,是一种特殊的二叉排序树。其左右子树都是平衡二叉树,且左右子树高度之差的绝对值不超...
    文哥的学习日记阅读 2,181评论 0 6