572. 另一个树的子树【力扣】

题意理解

判断一个树是不是另一个树的子树

问题分析

用两次递归,第一个递归用来查找当前子树的根等于另一个树的根,第二个递归用来判断根相等的两个树是否包含。

1009:比较固定到同根的情况,遍历不同根的情况

其他

链接

    bool isSubtree(TreeNode* s, TreeNode* t) {
        bool flag=false;
        if(s && t) {    //两棵树都存在的情况
            //cout << s->val << '\t' << t->val << endl;
            if(s->val==t->val) {    //相等
                flag=DoesTree1haveTree2(s, t);    //判断当前树是不是一样
            }
            if(!flag) {    //不相等,继续
                flag=isSubtree(s->left, t) || isSubtree(s->right, t);    //左子树是不是相等,右子树是不是相等
            }
        }
        return flag;
    }
    bool DoesTree1haveTree2(TreeNode* s, TreeNode* t) {
        if(!s && !t) return true;    //空树相等
        if(!s || !t) return false;    //仅有一个空树不等
        if(s->val!=t->val) return false;    //根值不等,不相等
        //cout << s->val << '\t' << t->val <left, t->left)    //递归判断左子树+右子树
               && DoesTree1haveTree2(s->right, t->right);
    }

 

你可能感兴趣的:(算法,树,C++)