实现思路:判断两个头节点是否相同
- 如果不同的话,t1往后走,继续和t2比较
- 如果两个头节点相同,判断两棵树是否相同即可(转变为判断树相同问题)
c++实现
class Solution {
public:
//判断两棵树是否相同
bool isEqual(TreeNode* root1, TreeNode* root2){
if(!root1 && !root2) return true;
if(!root1 || !root2) return false;
if(root1->val == root2->val){
return isEqual(root1->left, root2->left) && isEqual(root1->right, root2->right);
}else{
return false;
}
}
bool isContains(TreeNode* root1, TreeNode* root2) {
// write code here
if(!root1) return false; //3. 找不到相同的点,直接返回false即可
if(root1->val != root2->val){ //1. 两个节点不同,t1往后走,找和t2相同的点
return isContains(root1->left, root2) || isContains(root1->right, root2); //只要有相同的树即可,所以用 或(||)
}else{
return isEqual(root1, root2); //2. 找到相同的点,判断树是否相等即可
}
}
};