1367_ 二叉树中的列表C++

二叉树数据结构如下

//definition of binary tree node
struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

本题需要注意一点是子节点的匹配结果是受到父节点匹配结果影响的。分为两种情况:父节点匹配成功、父节点匹配失败
父节点匹配成功的情况

tree空tree不空
list空truetrue
list不空false继续匹配

父节点匹配失败的情况

tree空tree不空
list空falsefalse
list不空false继续匹配

所以只用一个递归函数是无法实现的。首先是单个节点的匹配,一个深度优先遍历

	bool dfs(ListNode* head, TreeNode* root) {
		if (head == nullptr)
			return true;
		else if (root == nullptr)
			return false;
		else if (head->val != root->val)
			return false;
		else
			return dfs(head->next, root->left) || dfs(head->next, root->right);
	}

是否匹配成功需要结合单个节点的匹配和后续子树的匹配情况

	bool isSubPath(ListNode* head, TreeNode* root) {
		//需要判断root是否是null,否则无法调用root->left,root->right
		if (root == nullptr)
			return false;
		return dfs(head, root) || isSubPath(head, root->left) || isSubPath(head, root->right);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值