python数据结构剑指offer-二叉树的深度

例题

描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。

数据范围:节点的数量满足 0 \le n \le 1000≤n≤100 ,节点上的值满足 0 \le val \le 1000≤val≤100
进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)
在这里插入图片描述

假如输入的用例为{1,2,3,4,5,#,6,#,#,7}
返回值:
4
示例2
输入:
{}
返回值:
0

解决方案

方案一:递归实现

class Solution:
    def TreeDepth(self , pRoot: TreeNode) -> int:
        # write code here
        if pRoot is None:
            return 0
#         print(self.TreeDepth(pRoot.left))
        left = self.TreeDepth(pRoot.left)
        print('left',left)
        right = self.TreeDepth(pRoot.right)
        print('right',right)
#         print(self.TreeDepth(pRoot.right))
#         return max(self.TreeDepth(pRoot.left),self.TreeDepth(pRoot.right)) + 1
        max_count = max(left, right) + 1
        print('max_count',max_count)
        return max_count

输出结果

left 0
right 0
max_count 1
left 1
left 0
right 0
max_count 1
left 1
right 0
max_count 2
right 2
max_count 3
left 3
left 0
left 0
right 0
max_count 1
right 1
max_count 2
right 2
max_count 4

递归的时候你可以想象成爬楼梯,比如一共有100层楼梯,你看了一下好长好高啊,怎么办呢?楼顶有宝藏,你不得不冲刺,但是这是100层,得留点体力,然后爬得时候给自己幻想,爬第一层就给自己心里安慰,这就是第一百层,就这样你爬了一百次,总算是来到了楼顶,这就是递归。

根据示例,我们根据爬楼梯案例,可以得出1就是第一百层,然后去找2,然后看到2有左节点,然后去4,发现4没有左右节点,所以执行max_count = max(left, right) + 1,得到4这边得深度是1,然后回去继续执行代码,这个时候到了2,2得左子树得深度为1,右子树到5,然后发现5有左子树,所以去到7,看到7是没有左右子树得,同样执行max_count = max(left, right) + 1,依次类推。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值