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

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

链接: 104.二叉树的最大深度
链接: 111.二叉树的最小深度
链接: 222.完全二叉树的节点个数

想法记录

104.二叉树的最大深度:深度是从根节点到叶子节点所经过的最多节点个数,高度是叶子节点到根节点所经过的最多节点个数。这道题其实层序遍历直接可以做出来,但是看卡哥说要掌握递归法。递归法首先考虑遍历方式,求深度和求高度对应的遍历方式是不一样的,求深度采用前序遍历方式,求高度采用后序遍历方式。所以这道题正规方法应该是前序遍历递归法,返回值为深度数值。递归结束条件是节点为null,递归函数的逻辑我并不是很理解,这里归总一下之前的题目的递归逻辑,也就是递归函数里面写的什么内容:

	    // 递归遍历
        // 前序遍历
        result.add(root.val); // 根节点的值加入result,处理逻辑
        preorder(root.left, result); // 左
        preorder(root.right, result); //右

	  // 递归遍历求最大深度
	  // 后序遍历
	 int leftHeight = maxDepth(root.left);
      int rightHeight = maxDepth(root.right);
      return Math.max(leftHeight,rightHeight)+1; //根节点汇总左右子树最大深度并且加1	

通过这两个例子可以看出,递归遍历的函数逻辑里,在根节点进行处理,左右节点再次调用递归函数进行递归。
111.二叉树的最小深度:首先题目给出的定义是根节点到最近的叶子节点的距离,所以当根节点的某个子节点为空这种情况应该要单独注意一下。可以通过后序遍历求最小高度计算。因为用后序代码更简洁一些。

        if(root==null) return 0;
        int m1=minDepth(root.left);
        int m2=minDepth(root.right);
        return root.left==null||root.right==null?m1+m2+1:Math.min(m1,m2)+1;

222.完全二叉树的节点个数:对于普通二叉树,可以直接用递归或者层序遍历都行,但是完全二叉树更特殊的性质就没有体现出来。

自己实现过程中遇到哪些困难

对于完全二叉树怎么遍历求节点个数仍需要继续学习。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值