剑指offer:树的子结构

class Solution{
public:
    bool HasSubtreeCore(TreeNode* pRoot1, TreeNode* pRoot2) {
    
        if (pRoot2 == nullptr) return true;
		if (pRoot1 == nullptr) return false;

        if(pRoot1 -> val == pRoot2 -> val) {
            return HasSubtreeCore(pRoot1->left, pRoot2->left) &&
                   HasSubtreeCore(pRoot1->right, pRoot2->right);
        
		}
		else {
			return false;
		}
	}
    bool HasSubtree(TreeNode* pRoot1,TreeNode* pRoot2){
     	if(pRoot1==nullptr || pRoot2==nullptr) return false;

     	return HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2)||HasSubtreeCore(pRoot1,pRoot2);

}
        

};

首先判断子数为空吗,为空为true,判断主数为空吗,为空为false;当满足主数和子树的指针指向的值一致时,再分别判断数的左右叶子节点一样不,另一个主函数中,如果两个指针有一个为空,则为false。返回(有可能是主数当前结点的的左子树和子树的当前节点一样;也有可能是主数当前结点的的右子树和子树的当前节点一样;还有一种可能是两个指针指向的节点正好相等(去到第一次定义的那个函数HasSubtreeCor里去,然后再判断其左右子树相不相等))

#剑指offer#
全部评论

相关推荐

09-27 14:42
已编辑
浙江大学 Java
未来未临:把浙大放大加粗就行
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务