算法_二叉树_二叉树的最大深度

二叉树的最大深度

leetcode链接

1.两种解法

递归法–后序遍历

采用后序遍历,先处理左孩子,再处理右孩子,最后处理中间节点;对于中间节点的处理就是求中间节点的最大深度,怎么求呢?

就是先求出中间节点的左子树的深度,再求出右子树的深度,然后取他们的最大值然后+1(这个+1是因为中间节点也算一层);

这样一看,是不是就发现需要做重复操作了。即想求中间节点的深度,就要求左子树深度,想求左子树深度,就要求左子树的左子树的深度(右子树同理)。这样一来我们就可以用后序遍历的逻辑(左右中)来写代码了。

递归出口就是,如果碰到了空节点,那么他的深度就是0。

代码如下:

def maxDepth(root):
    if not root:
        return 0
	
	# 使用后序遍历
    leftchild_depth = maxDepth(root.left) # 左
    rightchild_depth = maxDepth(root.right) # 右
    return max(leftchild_depth,rightchild_depth)+1 # 中

迭代法–层序遍历

看到这道题直观的想法就是,求深度的话那么我用层序遍历,定义一个变量,每到一层我就让这个变量+1,到最后这个变量的值就是深度了。那么我们要把这个变量+1的操作应该在层序遍历的什么位置呢,这里直接给出代码。

不清楚层序遍历的可以看我之前的文章:层序遍历

代码如下:

def maxDepth(root):
    queue = []
    depth = 0 # 定义depth变量
    if not root:
        return depth

	# 初始化先把root放入queue中
    queue.append(root)

    while queue:
        size = len(queue)
        depth += 1 # 每遍历完一层的节点就+1

		# 遍历该层的节点
        for i in range(size):
            node = queue.pop(0)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)


    return depth

2.总结

递归的时候要用到后序遍历的逻辑,不是凭空想象的。

推荐题目

n叉树的最大深度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值