实现思路:判断两个头节点是否相同

  • 如果不同的话,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. 找到相同的点,判断树是否相等即可
        }
    }
};