37 lines
873 B
Java
37 lines
873 B
Java
class Solution {
|
|
private boolean matches(ListNode head, TreeNode node) {
|
|
// linked list ran out ⇒ matches
|
|
if (head == null) {
|
|
return true;
|
|
}
|
|
|
|
// ran out of tree nodes ⇒ failed
|
|
if (node == null) {
|
|
return false;
|
|
}
|
|
|
|
// values don't match ⇒ failed
|
|
if (head.val != node.val) {
|
|
return false;
|
|
}
|
|
|
|
// check rest of the path
|
|
return matches(head.next, node.left) || matches(head.next, node.right);
|
|
}
|
|
|
|
public boolean isSubPath(ListNode head, TreeNode node) {
|
|
// cannot form a subpath
|
|
if (node == null) {
|
|
return false;
|
|
}
|
|
|
|
// check path starting from the current node
|
|
var result = matches(head, node);
|
|
|
|
// if doesn't match linked list, try from subtrees
|
|
result = result || isSubPath(head, node.left);
|
|
result = result || isSubPath(head, node.right);
|
|
|
|
return result;
|
|
}
|
|
}
|