0%

leetcode 112 Solution

代码解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.demo.s112;

import java.util.LinkedList;
import java.util.Queue;

/**
* 路径总和
* 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
*
* 叶子节点 是指没有子节点的节点。
*
* 来源:力扣(LeetCode)
* 链接:https://leetcode.cn/problems/path-sum
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*/
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public class Solution {
public boolean hasPathSum(TreeNode root, int sum) {
//判空
if (root == null) {
return false;
}
//遍历树时存放节点用
Queue<TreeNode> queNode = new LinkedList<TreeNode>();
//存放当前路径值
Queue<Integer> queVal = new LinkedList<Integer>();
//从root开始遍历
queNode.offer(root);
queVal.offer(root.val);
//遍历Queue中节点
while (!queNode.isEmpty()) {
TreeNode now = queNode.poll();
int temp = queVal.poll();
//深度遍历终止条件,左右子树为null,存入的长度 == sum
if (now.left == null && now.right == null) {
if (temp == sum) {
return true;
}
continue;
}
//左子树不为null
if (now.left != null) {
queNode.offer(now.left);
queVal.offer(now.left.val + temp);
}
//右子树不为null
if (now.right != null) {
queNode.offer(now.right);
queVal.offer(now.right.val + temp);
}
}
return false;
}
}