題目描述:
給你一棵以 root 爲根的二叉樹和一個 head 爲第一個節點的鏈表。
如果在二叉樹中,存在一條一直向下的路徑,且每個點的數值恰好一一對應以 head 爲首的鏈表中每個節點的值,那麼請你返回 True ,否則返回 False 。
一直向下的路徑的意思是:從樹中某個節點開始,一直連續向下的路徑。
示例 1:
輸入:head = [4,2,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
輸出:true
解釋:樹中藍色的節點構成了與鏈表對應的子路徑。
示例 2:
輸入:head = [1,4,2,6], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
輸出:true
示例 3:
輸入:head = [1,4,2,6,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
輸出:false
解釋:二叉樹中不存在一一對應鏈表的路徑。
提示:
二叉樹和鏈表中的每個節點的值都滿足 1 <= node.val <= 100 。
鏈表包含的節點數目在 1 到 100 之間。
二叉樹包含的節點數目在 1 到 2500 之間。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/linked-list-in-binary-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
emm比較簡單
使用遞歸即可
class Solution {
public boolean isSubPath(ListNode head, TreeNode root) {
if (head == null) {
return true;
}
if (root == null) {
return false;
}
return isend(head, root) || isSubPath(head,root.left) || isSubPath(head,root.right);
}
public boolean isend(ListNode head, TreeNode root) {
if (head == null) {
return true;
}
if (root == null) {
return false;
}
if (root.val == head.val) {
return isend(head.next, root.left) || isend(head.next, root.right);
}
return false;
}
}