C++/代码:

树的子结构

http://www.nowcoder.com/questionTerminal/6e196c44c7004d15b1610b9afca8bd88

C++/代码:

class Solution {
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
        if (!pRoot1 || !pRoot2) return false;//先判断空树返回false
        if (IsPart(pRoot1,pRoot2)) return true;//先找根节点
        return HasSubtree(pRoot1->left,pRoot2) || HasSubtree(pRoot1->right,pRoot2); //换个根节点
    }
    bool IsPart(TreeNode* p1,TreeNode* p2) {
        if (!p2) return true; //p2树为空,则为真子树
        if (!p1 || p1->val != p2->val) return false; //p1为空,或者根节点不相同则为假
        return IsPart(p1->left,p2->left) && IsPart(p1->right,p2->right); //根结点相同,验证左子树和右子树是否相同
    }
};
全部评论

相关推荐

03-11 10:06
已编辑
河南师范大学 C++
点赞 评论 收藏
分享
评论
15
1
分享

创作者周榜

更多
牛客网
牛客企业服务