java: add «1367. Linked List in Binary Tree»

Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2024-09-07 12:29:14 +02:00
parent 548b824d4a
commit 2ee32d75a6
Signed by: mfocko
SSH key fingerprint: SHA256:icm0fIOSJUpy5+1x23sfr+hLtF9UhY8VpMC7H4WFJP8
2 changed files with 52 additions and 0 deletions

15
java/ListNode.java Normal file
View file

@ -0,0 +1,15 @@
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}

View file

@ -0,0 +1,37 @@
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;
}
}