数据结构与算法分析笔记与总结(java实现)--二叉树5:平衡二叉树判断练习题

本文介绍了如何判断一棵二叉树是否为平衡二叉树,讲解了平衡二叉树(AVL树)的概念,以及如何通过递归算法判断其平衡性。文章还提供了Java代码示例,展示了一个递归函数来检查二叉树是否平衡及其高度。此外,还提及了搜索二叉树的定义和判断方法。
摘要由CSDN通过智能技术生成

视频(3)

子树的概念

平衡二叉树(AVL树)

平衡二叉树又叫作AVL树,所谓平衡二叉树是指对于这棵树中的任意根结点,他的左子树和右子树的高度是平衡的,即高度差是0或者1,何为子树的高度?所谓树的高度是指从根结点开始到叶子结点的最长的路径上的结点的数目(与书上有所不同但是以此为准),因此如果一棵二叉树,上面的任何根结点的左右子树的高度差小于1,那么这棵树就是平衡二叉树。直观的来看,如果某个结点开始的左边的最长路径与右边的最长路径的长度差大于1,那么这个结点就是不平衡的,即以该结点为根的树是不平衡的;反之,如果任何一个结点的左右最长路径都小于等于1,那么这棵树就是平衡的二叉树。

 

Tree5:平衡二叉树判断练习题

题目:有一棵二叉树,请设计一个算法判断这棵二叉树是否为平衡二叉树。给定二叉树的根结点root,请返回一个bool值,代表这棵树是否为平衡二叉树。

思路:根据定义,要判断一棵二叉树是否是平衡二叉树需要判断树上的每一个结点的左右子树的高度差是否小于等于1,显然需要遍历左右的根结点。其实对于二叉树而言,遍历时使用的遍历方式无非是先序遍历、中序遍历、后序遍历、按层遍历,选取合适的遍历方式即可。其中,先序遍历实际上是从上到下遍历结点的,由于是先根结点再左右子树,因此大致上是从上到下进行的;中序遍历是先左子树再中间根结点再右子树,因此大致上是从下开始的;后序遍历是先左结点再右结点再根结点,因此大致上是从下向上的,按层遍历特征太明显,从上到下,从左到右。本题中,要判断是否是平衡二叉树,需要对每个结点进行判断,对于每个结点又要得到它的左右子树的高度,如果从上到下遍历会对下部的子树进行多次的重复判断因此应该从下往上遍历子树判断子树是否平衡,即先判断左子树是否平衡,并求出其最大的高度,如果不平衡则整棵树不平衡;同理再求右子树是否平衡以及求出最大的高度,如果不平衡则整棵树不平衡;如果左右子树都平衡,那么比较2左右子树是否平衡即可,显然这是一个递归的过程。由于是先遍历左子树,再遍历右子树再遍历根结点,因此显然应该对后续遍历进行改造。


二叉树难的地方在于很多时候需要使用递归,而且是需要携带返回值的递归,此时高度抽象,但是不要灰心,需要多理解,多练习,找找感觉。

很巧妙,很简单:

其实还是一个递归的过程,构造一个递归函数,函数的功能是给定一个一棵子树的根结点root,返回这棵树的高度:递推关系是:对于任何一个跟结点,它的高度是其左右子树高度+1,即比较得到2个子树的高度,选取较大的高度+1即为当前结点的高度,于是求某个结点的高度转化为求它的子树的高度,这显然是一个递推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值