题目描述
此题是求B树是否为A树子结构,此处应用dfs来做,且由题意我们看到B树可以是A树中任意一段,只要A树中任意一个节点的val与B树中的val相等,我们就必须处理它们之间的子树关系,然而本题个人觉得不能用dp来做,目前还没看yxc大佬的视频,不知道能否有更快速的做法。
算法1
(暴力dfs) $O(nm)$
C++ 代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool hasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(!pRoot2) return false;
return dfs(pRoot1, pRoot2);
}
bool dfs(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot2 == nullptr) return true;
else if(pRoot1 == nullptr) return false;
if(pRoot1 -> val == pRoot2 -> val){
bool t =dfs(pRoot1 -> left, pRoot2 -> left)&&dfs(pRoot1 -> right, pRoot2 -> right);
if(t) return true;
}
return dfs(pRoot1 -> left, pRoot2)||dfs(pRoot1 ->right, pRoot2);
}
};