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

  (1)  进行树的遍历

(2)判断树1中以R为根节点的子树是不是和树B具有相同的结构

class Solution {

public:

    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)

    {

        bool result=false;//设置标志位

        if(pRoot1!=nullptr&&pRoot2!=nullptr)

        {

            result=DoseTree1HaveTree2(pRoot1,pRoot2);//判断两个节点是否为空

        if(!result)

            result=HasSubtree(pRoot1->left,pRoot2);

        if(!result)

        result=HasSubtree(pRoot1->right,pRoot2);

        }

        return result;

    }

    bool DoseTree1HaveTree2(TreeNode* pRoot1,TreeNode* pRoot2)

    {

        if(pRoot2==nullptr)

            return true;

        if(pRoot1==nullptr)

            return false;

        if(!Equal(pRoot1->val,pRoot2->val))

            return false;

        return DoseTree1HaveTree2(pRoot1->left,pRoot2->left)&&DoseTree1HaveTree2(pRoot1->right,pRoot2->right);

    }

    bool Equal(double num1,double num2)

    {

        if((num1-num2>-0.0000001)&&(num1-num2<0.0000001))

            return true;

        else

            return false;

    }

};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。