LeetCode111.二叉树的最小深度(Java/BFS/DFS)

题目

给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。

第一次写的代码,我觉得逻辑性不够强
写法一:DFS

	int min = Integer.MAX_VALUE;

	public int minDepth(TreeNode root) {
		if (root == null) {
			return 0;
		}
		// 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
		dfs(root, 1);// 对不起我看错题了 ,是求节点的数量!!
		return min;
	}

	public void dfs(TreeNode root, int sum) {
		if (root.left == null && root.right == null) {
			min = Math.min(min, sum);
			return;
		}
		if (root.left != null) {
			dfs(root.left, sum + 1);
		}
		if (root.right != null) {
			dfs(root.right, sum + 1);
		}
	}

写法二:BFS

public int minDepth2(TreeNode root) {
		if (root == null) {
			return 0;
		}
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		queue.add(root);
		int level = 0;
		while (!queue.isEmpty()) {
			level++;
			int size = queue.size();// 吃一堑长一智!!
			while (size-- > 0) {
				TreeNode top = queue.poll();
				if (top.left == null && top.right == null) {
					return level;
				}
				if (top.left != null) {
					queue.add(top.left);
				}
				if (top.right != null) {
					queue.add(top.right);
				}
			}
		}
		return -1;

	}

犯的错误有:

  1. int level = 0;level++;没有用level来记录,用的是size,然后size是队列的长度,随时都变,我们要求的是这棵树的深度!!!
  2. while (!queue.isEmpty()) ,写成while (queue.isEmpty()) 可还行???!!!
  3. TreeNode top = queue.poll();
    int size = queue.size();
    我说怎么总是返回-1,你都把元素poll出去了,size都为0 了,可还行???!!!
 if (top.left == null && top.right == null) {
			return level;
	}

我写成了top.left == null || top.right == null,我的想法是,层序遍历,如果那一层有空的节点,就可以跳出来,返回最小值了.但是人家说的是树根到叶子节点!!叶子节点!!!,如果有空的节点,那可能这棵树就是这样构造的呢??
其实我应该是想:遍历的这层,如果出现叶子节点,说明已经找到最小深度了,就可以返回!记住叶子节点!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值