例题
描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 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
,依次类推。