1367. 二叉树中的列表
难度中等
给你一棵以 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
思路1.0:
类匹配二叉树的套路
两层遍历,一层在树中寻找与链表的根值相同的节点,一层判断从上一部找到的节点是否和链表匹配。
第二层的遍历顺序:树,Tnode->left or Tnode->right, 链表 node->node.next
第二层子列表成立的判断条件:
1)值相等
2)listNULL , true;
3)list!=NULL && TnodeNULL, false
代码1.0(已完成):
class Solution {
public:
bool isMatching(ListNode* LNode, TreeNode* TNode)
{
if (LNode == NULL) return true;
if (LNode != NULL && TNode == NULL) return false;
return (LNode->val == TNode->val) && (isMatching(LNode->next, TNode->left) || isMatching(LNode->next, TNode->right));
}
bool isSubPath(ListNode* head, TreeNode* root) {
if (head == NULL || root == NULL) return false;
return isMatching(head, root) || (isSubPath(head, root->left) || isSubPath(head, root->right));
}
};