题目在这:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
思路分析:
找二叉树的最大深度,用递归比较好理解也比较好想。遍历左子树,遍历右子树。回退的时候记得加1。
递归出口:当前指针为null。
用上面的这个图来做个例子说明一下。
其中一个左子树递归到最后肯定是指针指向了8。
1.8的左孩子为null,所以回退到8这个节点。
2. 8的右孩子也为null,所以回退到8这个节点。
3. 而8的左右都是null所以为0。而此时从左右为空回退到了8,所以此时深度+1。
即 max(左子树,右子树) + 1
4.同理7的深度也是标记为1。
5. 所以 回退到3 的时候 选8和7之间深度最大的再加1 。这时候3的深度标记为2。
6. 同理,右子树的4深度也标记为2.
7. 递归回退到2。2的左子树3,和2右子树4,的深度标记都为2,所以选则左右子树中较大的深度标记数加一,就是3。
即该数最大深度为3.
有了上述分析帮助理解,递归代码就很好写。
完整代码
def getDepth(node: TreeNode):
if not node:
return 0
left_depth = getDepth(node.left)
right_depth = getDepth(node.right)
depth = 1 + max(left_depth, right_depth)
return depth
return getDepth(root)