栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode 404 左叶子之和 -- 迭代法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode 404 左叶子之和 -- 迭代法

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-of-left-leaves


题意:

计算给定二叉树的所有左叶子之和。

示例:

    3
    / 
  9   20
       / 
    15   7

在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24


参考文章

思路:

其实需要注意的是,之前我们判断一个节点是否具有某种特性,都是依据它本身以及它两个孩子的特点来判断的。但是这道题我们是要判断一个节点是不是一个左叶子节点,借助节点本身我们没法判断他是不是一个左叶子,所以我们需要从它的父节点来判断它是不是左叶子节点。

判断一个节点是不是一个左叶子节点,首先它需要是父节点的左儿子,其次它没有儿子。那么我们从它的父节点来对它进行判断,判断条件是 node.left != null && node.left.left == null && node.left.right == null ,其中node是当前我们判断节点的父节点。

所以这道题,我们对二叉树进行遍历,然后在每一个节点处判断它是否具有是叶子的左儿子即可。遍历方式都是可以使用的。在这里我使用的是层序遍历法。

本题Java代码:

class Solution {
	public int sumOfLeftLeaves(TreeNode root) {
		if (root == null)
			return 0;
		Deque deque = new linkedList<>();
		deque.offer(root);
		int ans = 0;
		while (!deque.isEmpty()) {
			TreeNode node = deque.poll();
			//以下是关键代码
			if (node.left != null && node.left.left == null && node.left.right == null)
				ans += node.left.val;
			if (node.left != null)
				deque.offer(node.left);
			if (node.right != null)
				deque.offer(node.right);
		}
		return ans;
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/727567.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号