这是一道简单的子树匹配问题,可以直接用深度优先搜索来完成,递归地比较每一个子树是否与给定子树匹配就可以了。
我的题解代码如下,他LeetCode不给过,我觉得逻辑上没什么问题。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool check(struct TreeNode *o,struct TreeNode *t){ if(!o && !t) return true; if((!o && t) || (o && !t) || (o->val!=t->val)) return false; return check(o->left,t->left) && check(o->right,t->right); } bool DFS(struct TreeNode *o,struct TreeNode *t){ if(!o) return false; return check(o,t) || check(o->left,t) || check(o->right,t); } bool isSubtree(struct TreeNode* s, struct TreeNode* t){ return DFS(s,t); }