###### tags: `leetcode` # leecode 1367 題目:https://leetcode.com/problems/linked-list-in-binary-tree/ ``` # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def isSubPath(self, head: Optional[ListNode], root: Optional[TreeNode]) -> bool: def dfs(h,r): if h==None: return True elif r==None: return False else: return (h.val==r.val)*(dfs(h.next,r.left)+dfs(h.next,r.right)) if head==None: return True elif root==None: return False else: return dfs(head,root)+self.isSubPath(head,root.left)+self.isSubPath(head,root.right) ``` 解題邏輯:當head的頭對到root的頭就繼續對下去,否則返回原點(對頭的地方)並對左右子樹做main 當head的頭對到root的頭就繼續對下去,這是DFS 做DFS否則返回原點(對頭的地方)並對左右子樹做main,這邊要做recursive main O(N * min(L,H)) N = tree size, H = tree height, L = list length