38 lines
873 B
Java
38 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;
|
||
|
}
|
||
|
}
|