代码随想录算法训练营0523| 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度● 222.完全二叉树的节点个数

104、559和111和层序遍历10道题里面的没区别。

不过卡哥好像用dfs+递归重写了,感觉还是层序遍历的迭代法更好懂啊

104.二叉树的最大深度

①层序遍历,记录层数

②dfs:求出左右子树的最大深度,取较大值

559.n叉树的最大深度

①层序遍历,记录层数。不过用for child in node.children来遍历每个节点的所有子树。而不仅限于左右子树

②dfs:求出左右子树的最大深度,取较大值

111.二叉树的最小深度

①层序遍历,记录层数。左右节点为空时结束循环

②dfs:求出左右子树的最小深度(节点的左右子树都为空),取较小值。但是注意根节点后只有左子树或者只有右子树的情况

222.完全二叉树的节点个数

满二叉树:所有节点都满

完全二叉树:从上到下、从左到右填充,如果有右孩子一定有左节点。但是可以没有右孩子。

和求最大最小深度的思路一样,把所有左节点和所有右节点的节点数加起来即可。

递归好难理解

class Solution:
    def countNodes(self, root: TreeNode) -> int:
        return self.getNodesNum(root)
        
    def getNodesNum(self, cur):
        if not cur:
            return 0
        leftNum = self.getNodesNum(cur.left) #左
        rightNum = self.getNodesNum(cur.right) #右
        treeNum = leftNum + rightNum + 1 #中
        return treeNum

会一直嵌入调用getNodesNum,直到 cur=None,return 0,而从一层底层返回来的LeftNum和TreeNum会一点一点叠加。

不好理解的是在前一层的递归里,return回来的treeNum值是赋给leftNum和rightNum参与下一层计算的,因此treeNum可以叠加(尝试举例理解),例如其中一步:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值