1月2日代码随想录二叉树的最小深度及层序遍历总结

本文讨论了如何使用递归方法解决二叉树的最小深度问题,强调了递归终止条件和寻找最浅叶子节点的重要性。同时,文章提到了层序遍历作为对比,虽然题目看似重复,但层次结构的理解是必要的。
摘要由CSDN通过智能技术生成

个人认为这么一个层序遍历的章节放这么多基本一样的题目算是很没意思的了 

填充每个节点的下一个右侧节点和二叉树最大深度和前面的代码几乎完全一样,所以我就跳过了

代码随想录 (programmercarl.com)

代码随想录 (programmercarl.com)

111.二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

提示:

  • 树中节点数的范围在 [0, 105] 内
  • -1000 <= Node.val <= 1000

思路

这道题目如果还用层序遍历去做的话基本就是在模板上面略作修改即可,我在这道题目上关注的还是它的递归解法也就是深度优先搜索。

这道题目要找一个深度最浅的叶子节点,即左右儿子皆为空,所以我们的递归结束条件即为left==right==null,而我们又需要找一个最浅的,所以当左右两侧节点均非空时,递归的返回值应当是分别对两者进行递归后的较小值加1.

class Solution {
    public int minDepth(TreeNode root) {
        if(root==null){
            return 0;
        }
        if(root.left==null&&root.right==null){
            return 1;
        }
        int m1=minDepth(root.left);
        int m2=minDepth(root.right);
        if(root.left==null||root.right==null){
            return m1+m2+1;
        }
        return (m1>m2?m2:m1)+1;
    }
}

其中,若是节点有一个儿子为空,则直接返回非空递归值加一即可。

层序遍历总结

层序遍历的思路就是将当前层的节点加入队列,然后将队首的子节点加入队尾,再将队首出队,不断循环直到队列为空。

public void checkFun02(TreeNode node) {
        if (node == null) return;
        Queue<TreeNode> que = new LinkedList<TreeNode>();
        que.offer(node);

        while (!que.isEmpty()) {
            List<Integer> itemList = new ArrayList<Integer>();
            int len = que.size();

            while (len > 0) {
                TreeNode tmpNode = que.poll();
                itemList.add(tmpNode.val);

                if (tmpNode.left != null) que.offer(tmpNode.left);
                if (tmpNode.right != null) que.offer(tmpNode.right);
                len--;
            }

            resList.add(itemList);
        }

    }

但是迭代法还需要进行练习。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值