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

104.

recursion:

前序是先评估本轮recursion的节点深度,然后再往下一个节点,一个一个看哪个最深(用max_depth记录好)。

后序是收集左右两个子节点各自的高度,然后挑大的再加一就是本节点的高度,从下到上就能求出root node的高度,which is 最深深度。

iteration(queue):

level traverse

559.

和104的前序一样,分三步,

        1. 存储最大值

        2. 判断是否是leaf node,如果是的话直接返回

                a. binary tree就if(!root -> left && !root -> right)

                b. n-tree就if(root -> children.size() == 0)

        3. 递归子节点

                a. 一定要判断left和right是否存在

                b. n-tree能进for loop一定存在所以不用单独判断

同样需要注意的是,在主function里先写出头节点不存在的情况(直接return 0)

111. 最小深度

后序遍历:

返回子叶的最短深度 + 1就是root node的最短深度

和最大深度不同,需要判断左右是否有子节点,如果没有节点的地方直接返回depth 为0的话,其实并没有遍历到Leaf node,也就是说并不是深度,如随想录中可见:

这种情况就要分情况讨论, 如果left right都没有到leaf node了,那就可以正常返回1,如果有左无右或者有右无左,那就不要考虑没有的那一边,只对有节点的地方recursion就行,如果左右都有那就像求max_depth一样返回 1 + min((recursion(left),recursion(right))就行

前序遍历:

最开始root == NULL的情况要放在main里,防止放在preorder()里的时候和recursion到底遇到NULL混淆。recursion里遇到null要直接返回,不需要设置min为0

222. 完全(complete)与满(full)的区别

首先最直接的方式是直接遍历,数节点个数

其次可以利用完全二叉树的性质:完全二叉树resursion到下面一定是满二叉树,而满二叉树的节点个数是:num_level ^ 2 - 1

注意 2 << 1是 2 * 2的意思,而不是2 * 1

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值