troubleasy

导航

 

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

思路:先序遍历A判定节点是否跟B的头结点相等;如果发现相等节点,就再次递归遍历相应A的子树是否包含B树;

        bool equal(TreeNode* p1,TreeNode* p2)
    {
        //p1可能比p2复杂;
     //   if(p2==NULL) return true;
        //bool res=true;
        if(p1==NULL||(p1->val!=p2->val)) return false;
        //if(p1!=NULL&&p2==NULL) return false;
        bool resl=true,resr=true;
        //不处理但有返回值
        if(p2->left!=NULL)
        {
            resl=equal(p1->left,p2->left);
        }
        if(p2->right!=NULL)
        {
            resr=equal(p1->right,p2->right);
        }
       // if(p2!=NULL&&p1!=NULL)
        return resl&&resr;
        
    }
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
    {
        //
        if(pRoot1==NULL||pRoot2==NULL) return false;
        bool res=false;
        if(pRoot1->val==pRoot2->val)
            res=equal(pRoot1,pRoot2);
        if(!res)
        {
            res=HasSubtree(pRoot1->left,pRoot2);
            if(!res)
                res=HasSubtree(pRoot1->right,pRoot2);
        }
        return res;
    }

posted on 2020-05-26 14:57  troubleasy  阅读(135)  评论(0编辑  收藏  举报