[Python3]110.平衡二叉树-递归(详细推导递归过程)

文章介绍了如何使用递归方法在Solution类中判断二叉树是否平衡,通过计算左右子树高度并检查其差的绝对值来确定平衡性。实例展示了如何创建TreeNode对象并测试isBalanced函数。
摘要由CSDN通过智能技术生成

整个递归是一个从底而上的过程!!!!!

1.根节点为空返回0

2.递归求出左右子树高度并且判断左右子树是否为平衡二叉树

3.如果平衡因子的绝对值大于1则判断不为平衡二叉树

4.如果平衡因子小于等于1,则返回左右子树高度的最大值+1(根节点),以此来方便进行下一层递归判断。

举例:  root , root->left  ,  root->right (一个根节点具有左右子树)

(1)判断root不为空,跳过。

(2)递归调用judge函数,指向根节点的左结点,将root->left作为参数输入judge,再递归调用judge,于是root->left->left作为参数输入judge,指向空。

(3)判断root为空,将0返回给judge。递归栈返回到上一层,即root->left这一层,此时指向root的左节点。

(4)递归调用judge函数,指向根节点的左节点的右结点,将root->left->right作为参数输入judge,再递归调用judge,于是root->left->right作为参数输入judge,指向空。

(5)判断root为空,返回0,此时我们得到了根节点的左节点的左右子树高度都为空,即root->left->left高度为0,root->left->right高度为0。

(6)判断abs()不大于1,因此左右子树高度加根节点为根节点的左子树的高度,即0 + 0 + 1 = 1,我们就得到递归后的结果,即根节点的左子树的高度为1.

.......

接下来同理我们可以知道,根节点的右子树高度也为1,最后判断根节点的左右子树高度都为1。

class TreeNode:
    def __init__(self,left = None, right = None,val = 0):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def judge(self, root:TreeNode):
        #根节点为空返回0
        if root is None: 
            return 0
        #计算左右子树高度
        leftHeight = self.judge(root.left)
        if leftHeight == -1:
            return -1
        rightHeight = self.judge(root.right)
        if rightHeight == -1:
            return -1
        if abs(leftHeight - rightHeight) > 1:
            return -1
        else:
            return max(leftHeight, rightHeight) + 1
    def isBalanced(self,root:TreeNode):
        if self.judge(root) != -1:
            return True
        return False
node = TreeNode()
node.left = TreeNode()
node.left.left = TreeNode()

a = Solution()
b = a.isBalanced(node)
print(b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值