判断子树问题

来源:互联网 发布:lewin'gene知乎 编辑:程序博客网 时间:2024/06/05 05:49

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

思路:判断A,B两个节点为根的树存在子树关系,如果不存在则判断以A的左子树或者右子树为根的树和B这颗树是否存在子树关系。

/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)    {        if(pRoot2==NULL||pRoot1==NULL)            return false;        return isSubTree(pRoot1, pRoot2)||isSubTree(pRoot1->left,pRoot2)||isSubTree(pRoot1->right,pRoot2);;    }    bool isSubTree(TreeNode* pRoot1, TreeNode* pRoot2){        if(pRoot1==NULL&&pRoot2!=NULL)//节点1为空但是节点2不为空说明未遍历完            return false;        if(pRoot2==NULL)//节点2为空说明遍历完成,返回true            return true;        if(pRoot1->val==pRoot2->val)            return isSubTree(pRoot1->left,pRoot2->left)&&isSubTree(pRoot1->right,pRoot2->right);        else            return isSubTree(pRoot1->left,pRoot2)||isSubTree(pRoot1->right,pRoot2);    }};



原创粉丝点击