树的子结构

来源:互联网 发布:编程珠玑 英文版 pdf 编辑:程序博客网 时间:2024/05/16 14:16

判断第二个树是不是第一个树的子结构。空树不是任何树的子结构。

第一步:前序遍历找节点和第二个树的根一样的,进入第二步

第二步:递归判断根是否相同,左子树是否相同,右子树是否相同。递归退出条件是:若第二个树的节点为NULL,返回true,若第一个树的节点为空返回false.这两个条件不能反

/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    bool chk(TreeNode * t1, TreeNode * t2){        if(t2==NULL) return true;        if(t1==NULL) return false;        if(t1->val == t2->val){            return chk(t1->left, t2->left)&&chk(t1->right, t2->right);        }        return false;    }    bool find(TreeNode * t1, TreeNode * t2){        if(t1==NULL) return false;        if(t1->val == t2->val){            if(chk(t1, t2)) return true;        }        if(find(t1->left, t2)) return true;        if(find(t1->right, t2)) return true;        return false;    }    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)    {        if(pRoot2==NULL) return false;        return find(pRoot1, pRoot2);    }};


0 0
原创粉丝点击